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

标签 api authentication jwt microservices

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

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

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

身份验证的标准流程是:

用户通过隐式流联系 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”端点,但它只会获取 JSON 格式而不是 JWT...

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

非常感谢!

最佳答案

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

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

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

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

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

关于api - 使用 JWT 和 OpenID Connect 在微服务中进行客户端身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39134238/

相关文章:

html - 谷歌如何跟踪 api 请求限制

使用 AWS Cognito 进行 R Shiny 身份验证

java - Spring 安全 "Remember Me"复选框

javascript - JWT:用户打开新标签页时如何处理 GET 请求?

java - Neo4j、REST API、java - 密码查询

ruby - 如何在 ruby​​ 中指定 youtube api 的时间

java - 微调器返回 null

ruby-on-rails - Ruby on Rails : "The change you wanted was rejected" on Form Submission

java - 火力基地 |使用第三方 JWT 库验证 ID token

php - Laravel JWT 和社交名流插件