如何建立微服务& OpenID连接?

时间:2016-06-28 08:10:32

标签: microservices openid-connect oauth2

我们有三个微服务:microA,microB&的MicroC。

  • microA& microB正在为产品1供电。
  • microA& microC正在为产品2供电。

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

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

例如,在服务microA上,我们存储用户OpenID XXX可以执行此操作。它在微服务级别上被隔离。尊重我们背景的界限。细

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

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

现在,假设我的用户访问第三方网络应用程序并提示您登录&允许第三方获得product1 API的一些权利。

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

我发现的最佳方案是:

  1. 使整个OpenID连接具有身份验证信息

  2. 然后再向另一个授权服务器发出另一个完整的OAuth2进程,要求用户将一些范围授予第三方?

  3. 表示在第三方:

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

    这是对的吗?如果是,OAuth2服务器流就像是对最终用户的4个HTTP请求,因此执行两次就像执行8个请求以完成Authentication + Authorization流程一样。似乎太大了。

1 个答案:

答案 0 :(得分:1)

我已经遇到过这个问题。我要做的是:

  • 使用这个新的OpenId微服务对用户进行身份验证并创建访问令牌。此访问令牌可以是具有权限的字符串,user_id和签名的时间戳,或者您可以将此信息存储在数据库中。

  • 然后,对于每次通话(对product1或product2):

    • 我会强制客户端在标头上发送访问令牌。
    • 然后,当微服务接到一个电话(比如说product1)时,我会向OpenId微服务发送一个签名请求,询问是否允许该用户执行该操作。

这样,只有OpenId微服务才知道身份验证的工作原理。因此,如果您想在几周内更改身份验证的工作方式,则只需在OpenId微服务上进行更改即可。

我真的不明白第三方的问题是什么。他们将获得令牌,他们将能够在Access-token标头上执行呼叫传递。