【发布时间】:2023-03-26 08:33:01
【问题描述】:
我正在研究一个新项目,我们计划先做 API,这样我们就可以在上面实现 Web 和本地应用程序,并允许第三方集成。到目前为止,一切都相当标准。
我们还希望为 API 提供一整套自动化测试,以确保它在没有回归的情况下工作,并确保它满足要求。同样,相当标准,但因为我们正在测试 API,我们将使用代码内 HTTP 客户端而不是 Web 浏览器。
我们一直在研究 oauth2/OpenID Connect 以促进 API 的身份验证和授权 - 基本上,客户端可以进行身份验证、获取访问令牌,然后使用它来访问所有 API 资源。
我正在努力解决的问题是让自动化测试与 oauth2 部分一起工作以便能够实际调用 API 的好方法。第一个想法是使用“client_credentials”或“password”授权类型,它们看起来都可以满足我们的需求,但 OpenID Connect 规范根本没有涵盖它们,当然还有“password” " 至少它通常被认为不是一个好主意。
这是实现这一目标的最佳方式,还是在这种情况下是否有其他最佳实践可以与其他流程一起使用,但没有网络浏览器?
编辑:在(更多)阅读之后,我有了一个新计划。完全离线运行测试,针对单独的数据库使用单独的部署,并在测试运行之前将数据直接播种到数据库中,然后使用标准的 OpenID Connect 流程,但使用:
- 在数据库中标记为用于测试目的的客户端。这一点很重要,只有当客户端可以直接注册到数据库中而不经过业务逻辑时才有可能。
- 提示=无
- login_hint=获取访问令牌的用户名
- 范围包含“测试”
然后系统可以检测到这些事实组合,并自动验证提供的用户名,而无需通过浏览器。
这看起来合理吗?还是有更好的办法?
【问题讨论】:
-
你试过OpenID基金会提供的OpenID Connect certification tool吗?
-
我的理解是,这是为了测试 OpenID Connect 服务本身,而我更感兴趣的是测试将在 OAuth2 / OpenID Connect 访问令牌后面生成和保护的其他 API 服务,这意味着为了调用它们,我需要某种以编程方式获取有效访问令牌的方法。
-
我不明白如何创建一个特殊的测试用户是安全的?如果有人可以访问您的测试环境,或者想出如何在生产环境中创建测试用户怎么办?对我来说,这似乎不是正确的解决方案。
-
我应该澄清一下(我刚刚在我的帖子中做了)。我的 E2E 测试是针对在进程内运行的 webapp 版本运行的,该版本本身针对在进程内运行的数据库运行,并且测试进程在测试运行之前将数据直接播种到数据库中,并且可以在必要时进行验证。我正在使用 Java 和 Maven,所以我正在使用 maven-cargo-plugin 运行 webapp,并使用 embedmongo-maven-plugin 启动一个数据库,以便 webapp 与之交谈。任何人都不需要通过任何正常方式创建具有此特殊标志的用户,因此风险较小。
-
好的,有道理。在我们的例子中,我们有一个类似生产的 UAT 环境,我们希望在其上运行我们的端到端测试。直到上周,我们一直在使用一种变通方法,使我们能够获得一个谷歌 OAuth 令牌,但不幸的是,该令牌已经停止工作。很高兴知道什么是适合我们的解决方案。
标签: openid-connect acceptance-testing oauth2 e2e-testing