gpt4 book ai didi

python - 测试时模拟 Oauth 提供者

转载 作者:太空狗 更新时间:2023-10-29 17:32:25 26 4
gpt4 key购买 nike

我有一个正在编写的应用程序,它针对 Oauth 2.0 授权服务器进行身份验证。我想测试只有在您登录后才能访问的部分,但 Oauth 服务器是一个外部依赖项,它使我的测试变得复杂和脆弱。

关于我应该如何处理这件事有什么建议吗?像这样的行业惯例是什么?我的直觉是以某种方式模拟服务器,以便它允许访问 protected 资源。

万一重要,这是一个使用 Flask 编写的 Python webapp。

我正在使用将在我自己的域上运行的自定义 oauth 服务器,虽然可以按照 FoxMask 的建议添加某种沙盒功能,但我更希望能够在不需要运行额外服务器的情况下运行测试.

最佳答案

从消费者(即您的应用程序)方面来看,OAuth2 流程可以分为两部分:

  1. 从您的应用程序重定向到 OAuth2 提供商的“授权”URL
  2. 交换 OAuth2 提供商返回的“代码”以获取访问 token

对于 #1,您需要测试的是,当您调用启动身份验证过程的路由时,返回的响应是重定向到 OAuth2 提供程序。这可以通过 Flask 的 test client 轻松完成。 .响应的状态代码应为 302,并且“位置” header 设置为 OAuth2 提供商的授权 URL。请注意,您不需要提供程序启动,您只是在测试响应是否为重定向,但您不需要实际重定向。

#2 的测试稍微复杂一些。您的 Flask 应用程序有一个特殊的 URL,该 URL 被指定为 OAuth2 提供商向您发回授权码的“重定向 URL”。您可以使用传递模拟代码的 Flask 测试客户端调用此 URL,这没有问题。

问题在于,在处理重定向 URL 的 View 函数中,您需要调用 OAuth2 提供程序来交换访问 token 的授权代码,并且这是同步完成的。为防止此事务发生,您必须检查 app.config['TESTING'] 并在这种情况下跳过实际请求并将其替换为包含模拟访问 token 的虚假响应。

从那时起,您还需要伪造对发送访问 token 以请求数据的 OAuth2 提供商的任何其他调用。

如果您在 Flask 应用程序中使用 OAuth2 客户端库,则创建模拟提供程序可能更容易,而无需在您的应用程序中创建测试异常。就我而言,我使用的是 rauth ,为此我创建了 OAuth2Service 类的一个子类,它覆盖了正确的方法并使用我从真实 session 中捕获的模拟数据进行响应。然后在我的测试设置中,我只创建模拟服务,应用程序被愚弄以为它正在与真实服务器对话。

希望对您有所帮助。

关于python - 测试时模拟 Oauth 提供者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18827985/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com