首页 文章

使用JWT和OpenID Connect在微服务中进行客户端身份验证

提问于
浏览
2

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

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

此外,为了避免使用多个 endpoints ,您可以部署API Gateway,使最终用户只有一个 endpoints . 好的,现在我对这个架构有两个问题 .

用于身份验证的标准流程将是:

用户使用隐式流联系OpenID Connect中的我的身份服务器并获取id_token(JWT)以及access_token . 用户现在可以使用此access_token与我的API联系 . API网关将使用身份服务器对access_token进行保护,并检索JWT以将其添加到微服务API的子请求中 .

1 / API网关如何从access_token获取JWT?从文档中的红色(http://openid.net/specs/openid-connect-core-1_0.html),它可以联系"/userinfo" endpoints ,但它只会获得JSON格式而不是JWT ...

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

非常感谢你!

1 回答

  • 4

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

    • 您可以实现新的身份验证微服务,以将oAuth2访问令牌转换为JWT令牌 . 该微服务还将签署此JWT令牌 .

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

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

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

相关问题