我正在研究一个新项目,计划首先基于API进行开发,然后再在其上实现Web应用和本地应用程序,并允许第三方集成。到目前为止都很标准。
我们还希望为API拥有完整的自动化测试套件,既要确保它在没有回归的情况下正常工作,也要确保它符合需求。这也很标准,但因为我们正在测试API,所以将使用代码中的HTTP客户端而不是Web浏览器。
我们一直在研究OAuth2 / OpenID Connect来促进API的身份验证和授权 - 基本上是让客户端进行身份验证,获取访问令牌,然后使用它来访问所有API资源。
我所面临的难题是如何使自动化测试与OAuth2部分配合良好,以便能够调用API。最初的想法是使用“client_credentials”或“password”授权类型,这两种方法似乎都符合我们的要求,但它们在OpenID Connect规范中没有涵盖,并且至少通常不被认为是一种好方法。
这是实现此目标的最佳方法吗?还是说有其他最佳做法可用于这种情况,并且可以与其他流程一起使用,但不需要Web浏览器?
编辑:经过(大量)阅读后,我有了新计划。完全离线运行测试,使用针对分开的数据库的单独部署,并在测试运行之前直接将数据种子放入数据库中,然后使用标准的OpenID Connect流程,但是:
- 一个客户端被标记为用于测试目的。这是一个重要的部分,只有在客户端可以直接注册到数据库而无需通过业务逻辑时才可能实现。
- prompt=none
- login_hint=要获取访问令牌的用户名
- 包含“testing”的作用域
系统随后可以检测到这些事实的组合,并自动验证已提供的用户名,而无需通过浏览器进行身份验证。
这个方案看起来合理吗?还是说有更好的方法?