【问题标题】:Client authentication in microservices using JWT and OpenID Connect使用 JWT 和 OpenID Connect 在微服务中进行客户端身份验证
【发布时间】:2017-01-01 05:37:02
【问题描述】:

我对微服务架构中的身份验证有一些疑问。我现在有一个单体应用程序,我的目标是将应用程序拆分为小型微服务。

我最大的问题是身份验证(目前)。在阅读了很多文档之后,似乎最好的解决方案是使用 OpenID Connect 对用户进行身份验证,以检索可以通过请求传递给微服务的 JWT。

此外,为避免使用多个端点,您可以部署 API 网关以仅为最终用户提供一个端点。好的,现在我对这个架构有两个问题。

认证的标准流程是:

用户在 OpenID Connect 中联系我的身份服务器并使用隐式流连接并获取 id_token (JWT) 和 access_token。用户现在可以使用这个 access_token 联系我的 API。 API 网关将使用身份服务器验证 access_token 并检索 JWT 以将其添加到微服务 API 的子请求中。

1/ API Gateway如何从access_token中获取JWT?根据我从文档 (http://openid.net/specs/openid-connect-core-1_0.html) 中获得的信息,它可以联系“/userinfo”端点,但它只会获得 JSON 格式而不是 JWT...

2/ 我想在我的微服务之间允许经过身份验证的调用。所以每个微服务都需要能够生成一个 JWT 来直接联系其他微服务。我的第一个想法是联系身份服务器。但是使用 OAuth2 客户端凭据流,我不会检索 id_token 或 JWT。只是一个没有 JWT 的经典 OAuth2 访问令牌。我的第二个想法是,微服务可以使用与身份服务器使用的 PKI 相同的 PKI 颁发的证书直接签署自己的 JWT。这意味着 JWT 可以由多个证书签名,但来自同一个私有 PKI。当微服务收到 JWT 时,它需要能够识别用于签署 JWT 的女巫证书。我在 RFC 上没有找到关于这个问题的任何内容。我可以在令牌中添加我自己的私人声明以获得证书,但是经过几天浏览网页而没有看到这种解决方案,我想知道我是否没有走错路......总结一下,如何我可以在 JWT 中执行“用户到服务”身份验证和“服务到服务”身份验证吗?

非常感谢!

【问题讨论】:

    标签: api authentication jwt microservices


    【解决方案1】:

    我正在实施类似的解决方案。不确定它是否会完全解决您的问题,但是,我希望它有所帮助:

    1. 您可以实现一个新的身份验证微服务来将您的 oAuth2 访问令牌转换为 JWT 令牌。此微服务还将签署此 JWT 令牌。

    2. 您的 API 网关会将所有客户端请求路由到身份验证服务,该服务将从 IDM 验证此令牌并将其转换为已签名的 JWT 令牌。

    3. API 网关会将此 JWT 令牌传递给其他微服务,这些微服务将验证来自身份验证服务的公钥的签名。如果签名有效,则可以从中提取角色进行授权。

    4. 每个微服务都可以配置自己的 IDM 凭据,当它想要调用任何其他微服务时,它可以生成访问令牌并调用身份验证服务以获取 JWT,该 JWT 可以在调用中传递给其他微服务。

    【讨论】:

      猜你喜欢
      • 2017-12-17
      • 2020-06-12
      • 2017-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-30
      相关资源
      最近更新 更多