我们有三个微服务:microA,microB&的MicroC。
显然,我们需要一个安全层,在我们的例子中实现一个" OpenID Connect"提供商非常适合业务需求。我们将OpenID提供程序添加到堆栈中。
用户/权限管理非常简单&自然:我们将每个微服务上用户的OpenId标识符与权限子集相关联:
例如,在服务microA上,我们存储用户OpenID XXX可以执行此操作。它在微服务级别上被隔离。尊重我们背景的界限。细
当用户在product1上使用OpenID登录时,我们会向用户授予访问令牌+ Id令牌。
当product1公开第三方使用的API时,情况会变得更加复杂。
现在,假设我的用户访问第三方网络应用程序并提示您登录&允许第三方获得product1 API的一些权利。
如果我理解正确的OpenID连接,那就是关于OAuth2的身份验证,但我们如何处理经典的OAuth2范围管理呢?
我发现的最佳方案是:
使整个OpenID连接具有身份验证信息
然后再向另一个授权服务器发出另一个完整的OAuth2进程,要求用户将一些范围授予第三方?
表示在第三方:
这是对的吗?如果是,OAuth2服务器流就像是对最终用户的4个HTTP请求,因此执行两次就像执行8个请求以完成Authentication + Authorization流程一样。似乎太大了。
答案 0 :(得分:1)
我已经遇到过这个问题。我要做的是:
使用这个新的OpenId微服务对用户进行身份验证并创建访问令牌。此访问令牌可以是具有权限的字符串,user_id和签名的时间戳,或者您可以将此信息存储在数据库中。
然后,对于每次通话(对product1或product2):
这样,只有OpenId微服务才知道身份验证的工作原理。因此,如果您想在几周内更改身份验证的工作方式,则只需在OpenId微服务上进行更改即可。
我真的不明白第三方的问题是什么。他们将获得令牌,他们将能够在Access-token标头上执行呼叫传递。