首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何构建微服务与OpenID连接?

如何构建微服务与OpenID连接?
EN

Stack Overflow用户
提问于 2016-06-28 08:10:31
回答 1查看 2.8K关注 0票数 3

我们有三个微服务: microA、microB和microC。

  • microA & microB正在为产品1提供动力。
  • microA & microC正在为产品2提供动力。

显然,我们需要一个安全层,在我们的示例中,实现"OpenID连接“提供程序非常适合业务需求。我们将OpenID提供程序添加到堆栈中。

用户/权限管理非常简单和自然:我们将每个微服务上的用户的OpenId标识符与一个权限子集关联起来:

例如,在服务microA上,我们存储用户OpenID XXX可以这样那样做。在微观服务层面上是孤立的。尊重我们所处的环境。很好。

当用户使用OpenID登录product1时,我们将访问令牌授予用户+ Id令牌。

当product1公开第三方使用的API时,情况变得更加复杂。

现在,假设我的用户访问了第三方webapp并被提示登录&允许第三方在product1 API上获得一些权限。

如果我正确地理解了OpenID连接,那么这都是关于OAuth2上的身份验证,但是我们如何处理经典的OAuth2范围管理呢?

我发现的最佳方案是:

  1. 使整个OpenID连接具有身份验证信息
  2. 然后将另一个完整的OAuth2进程发送给另一个授权服务器,以要求用户将一些作用域授予第三方?

这意味着在第三方:

  • 将提示用户登录OpenID提供程序。
  • 然后重定向并提示接受所请求的范围。

对吗?如果是,OAuth2服务器流就像对最终用户的4个HTTP请求,因此执行两次就像执行八个请求来完成身份验证+授权流一样。看起来太大了。

EN

回答 1

Stack Overflow用户

发布于 2016-07-10 12:29:15

我已经有这个问题了。在你的情况下我会做的是:

  • 使用这个新的OpenId微服务对用户进行身份验证并创建访问令牌。此访问令牌可以是一个具有权限、user_id和时间戳签名的字符串,也可以将此信息存储在数据库中。
  • 然后,对于每个调用(对product1或product2):
代码语言:javascript
复制
- 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微服务上更改它。

我真的不明白第三方有什么问题。他们将获得令牌,并且能够在访问令牌头上执行传递它的调用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38070572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档