我是微服务和身份验证的新手,我试图了解如何以最少的开发工作在微服务架构中实现身份验证。
据我了解,微服务架构中存在两种可能的身份验证方案:
1)用户想要访问一种微服务
2)其中一个微服务想要访问另一个微服务
我已经了解了用户如何通过JWT访问微服务之一,在我看来,实现这一目标的最快方法是使用IdaaS产品(例如AWS Cognito或Google Cloud Identity Platform)。
我正在努力了解如何解决微服务到微服务身份验证的问题。
假设用户通过JWT访问微服务A。此时,微服务A需要访问微服务B。然后,微服务B需要访问微服务C。 服务A,B和C之间的身份验证应如何处理?最快的方法是什么?我可以再次使用类似AWS Cognito的工具吗?怎么样?
预先感谢您的回答。
答案 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:根据情况,密钥管理可能很复杂。您需要制定密钥轮换政策以确保安全。