我正在研究一个新的项目,我们计划先做API,这样我们就可以在上面实现web和原生应用程序,并允许第三方集成。到目前为止都是相当标准的。
我们还希望为API提供一套完整的自动化测试,以确保它在没有回归的情况下工作,并确保它满足需求。同样,这也是相当标准的,但是由于我们正在测试API,所以我们将使用的是一个内置的HTTP客户机,而不是一个web浏览器。
我们一直在研究oauth2/OpenID,以方便API的身份验证和授权--基本上是为了使客户端能够进行身份验证,获取访问令牌,然后使用该令牌访问所有API资源。
我正在努力解决的是让自动化测试与oauth2部件一起工作,从而能够真正调用API的一个很好的方法。第一个想法是使用"client_credentials“或”密码“授予类型,这两种类型似乎都适用于我们想要的东西,但它们根本不包括在OpenID连接规范中,当然,”密码“--至少它通常被认为不是一个好主意。
这是实现这一目标的最佳方法吗?对于这种情况,是否有其他最佳实践可用于其他流,但不需要web浏览器?
编辑:(多读)之后,我有了一个新的计划。完全脱机地运行测试,使用针对单独数据库的单独部署,并在测试运行之前直接将数据播种到数据库,然后使用标准的OpenID连接流,但需要:
然后,系统可以检测事实的组合,并自动验证所提供的用户名,而无需通过浏览器。
这听起来合理吗?还是有更好的方法?
发布于 2016-09-01 15:38:48
由于您希望测试API,所以您如何通过浏览器或其他方式获得access_token并不重要。因此(至少)有两个解决方案:
client_credentials拨款。您必须使授权服务器返回一个access_token,该access_token类似于通过浏览器在OpenID连接流中为用户返回的access_token,但取决于您作为可实现的实现。access_token旁边生成refresh_token,并在配置时与测试客户端以及client_id和client_secret一起存储两个令牌。然后,您的测试客户端可以访问API,直到access token过期,然后通过refresh_token授予类型获得一个新的access_token (利用client_id和client_secret)。OpenID连接本身、用户身份验证和id_token与您应该只关心access_token的API无关。
https://stackoverflow.com/questions/39180008
复制相似问题