我们有三个微服务: microA、microB和microC。
显然,我们需要一个安全层,在我们的示例中,实现"OpenID连接“提供程序非常适合业务需求。我们将OpenID提供程序添加到堆栈中。
用户/权限管理非常简单和自然:我们将每个微服务上的用户的OpenId标识符与一个权限子集关联起来:
例如,在服务microA上,我们存储用户OpenID XXX可以这样那样做。在微观服务层面上是孤立的。尊重我们所处的环境。很好。
当用户使用OpenID登录product1时,我们将访问令牌授予用户+ Id令牌。
当product1公开第三方使用的API时,情况变得更加复杂。
现在,假设我的用户访问了第三方webapp并被提示登录&允许第三方在product1 API上获得一些权限。
如果我正确地理解了OpenID连接,那么这都是关于OAuth2上的身份验证,但是我们如何处理经典的OAuth2范围管理呢?
我发现的最佳方案是:
这意味着在第三方:
对吗?如果是,OAuth2服务器流就像对最终用户的4个HTTP请求,因此执行两次就像执行八个请求来完成身份验证+授权流一样。看起来太大了。
发布于 2016-07-10 12:29:15
我已经有这个问题了。在你的情况下我会做的是:
- I would force the client to send the access-token on the headers.
- Then, when a microservice receives a call (lets say product1), I would send a signed request to the OpenId Microservice to ask if the user is allowed to perform that action.
这样,只有OpenId微服务知道身份验证是如何工作的。因此,如果您想在几周内更改身份验证的工作方式,您只需在OpenId微服务上更改它。
我真的不明白第三方有什么问题。他们将获得令牌,并且能够在访问令牌头上执行传递它的调用。
https://stackoverflow.com/questions/38070572
复制相似问题