【问题标题】:Unit Test oAuth2 Authorization Code单元测试 oAuth2 授权码
【发布时间】:2017-08-29 23:50:31
【问题描述】:

我可以通过 Guzzle 从 Laravel 使用外部 api 进行连接。该 api 需要使用授权码通过 o​​Auth2 进行身份验证。我想知道如何仅使用用户名和密码来集成测试重定向场景?

换句话说:如何通过重定向来模拟浏览器操作,以便在集成测试中从重定向的 uri 中“获取”授权码?

流程

  • 我请求(GET)外部api的登录页面
  • 我必须填写用户名和密码
  • 正确登录后,我将被重定向到指定的重定向uri,并以de授权码作为查询参数

自动化测试

  • 我可以连接 api,并且可以执行 GET、POST 和 PUT 请求
  • 重定向场景通过浏览器工作,但是在集成测试场景中,我只有用户名和密码,没有CSRF、viewState等字段

问题

在第一个 GET 请求(获取登录表单)的响应中,有多个隐藏字段(CSRF、viewState)。我无法在我的 POST 请求中模拟的那些字段。我只有用户名和密码字段。所以在这种情况下,我从未被重定向,但它再次返回登录页面。因为我错过了关键的隐藏字段。

【问题讨论】:

  • 你想达到什么目的?对相关逻辑进行单元测试,或者使用伪造/模拟的 oauth 服务器创建集成测试?
  • 我想从重定向 uri 中获取授权码。伪造或模拟的身份验证服务器有什么用处?
  • 这取决于您的用例。您真的想从测试中调用外部 api,然后将其成功与外部 api 耦合吗?阅读您的问题,我很难理解您想要实现的目标。
  • 感谢您的快速评论。我想使用外部演示 api(集成测试)测试真正的身份验证,而无需模拟或伪造。身份验证后,我想通过将 XML 发布到该 api 来测试真正的通信(已经有效)。
  • @schellingerht 我也在尝试对身份验证代码流进行单元测试。你找到解决办法了吗?

标签: php laravel unit-testing oauth-2.0 guzzle


【解决方案1】:

我需要做以下事情:

一次:

  • 请求授权码
  • 请求访问令牌+刷新令牌

如果刷新令牌可用:
当访问令牌过期时,用当前的刷新令牌请求一个新的令牌对(访问+刷新)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-30
    • 2021-04-24
    • 2015-02-23
    • 1970-01-01
    • 2018-11-04
    • 2018-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多