在微服务架构中处理服务到服务认证的快速解决方案

时间:2020-04-25 22:05:43

标签: authentication authorization microservices amazon-cognito

我是微服务和身份验证的新手,我试图了解如何以最少的开发工作在微服务架构中实现身份验证。

据我了解,微服务架构中存在两种可能的身份验证方案:

1)用户想要访问一种微服务

2)其中一个微服务想要访问另一个微服务

我已经了解了用户如何通过JWT访问微服务之一,在我看来,实现这一目标的最快方法是使用IdaaS产品(例如AWS Cognito或Google Cloud Identity Platform)。

我正在努力了解如何解决微服务到微服务身份验证的问题。

假设用户通过JWT访问微服务A。此时,微服务A需要访问微服务B。然后,微服务B需要访问微服务C。 服务A,B和C之间的身份验证应如何处理?最快的方法是什么?我可以再次使用类似AWS Cognito的工具吗?怎么样?

预先感谢您的回答。

2 个答案:

答案 0 :(得分:1)

您应该使用OAuth 2.0客户端凭据授予。此流程用于服务之间的身份验证。每个服务将使用其自己的凭据从令牌服务中获取令牌,并使用该证书来调用另一个服务。

答案 1 :(得分:0)

某些服务网格解决方案通过 mTLS 提供服务到服务的身份验证,例如

另一种方法是为您的服务使用另一个 JWT。服务 A 将发布自己的 JWT 并将其发送给服务 B。服务 B 确保声明有效(例如,iss 代表服务 A,而 aud 代表服务 B,令牌尚未重播等)。如果一切顺利,服务 B 发出自己的令牌并将其发送给服务 C,后者也将验证令牌。

重要提示:

RFC Proof of Posession Key for JWTs

我个人更喜欢使用非对称密钥的所有权证明:JWT 必须由发行人只知道的私钥签名。所以应该保密。公钥应该共享给其他服务,以便他们可以验证 JWT 签名。

我是如何实现的: 演示者(发送请求的服务)也是颁发者(发出 JWT)。用于签署 JWT 的密钥(例如 Google 应用程序凭据)是从我的云提供商处下载的。云提供商充当密钥管理器并拥有一个 JWKs 端点,在那里可以通过密钥 ID 获取和查找颁发者的公钥。 接收方(接收并验证请求的服务)将从云提供商(密钥管理器)获取公共信息并验证 JWT。

注意:您必须了解并利用 JWT 声明来强制执行安全性。

注2:根据情况,密钥管理可能很复杂。您需要制定密钥轮换政策以确保安全。