【发布时间】: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