使用 JWT 的微服务认证和授权

Posted

技术标签:

【中文标题】使用 JWT 的微服务认证和授权【英文标题】:Microservice Authentication and Authorization using JWT 【发布时间】:2020-11-29 05:50:27 【问题描述】:

我创建了两个微服务让 A 和 B。每个微服务都有自己的数据库和用于存储用户名和密码的用户表。我正在维护相同的签名密钥以在所有微服务中生成密钥。

微服务的用户可以轻松访问其微服务的安全 API。但是假设我想访问 B 微服务的安全 api,那么它会在使用 UserDetailsS​​ervice 在 Spring 安全上下文中设置身份验证对象时给我错误,因为 B 微服务用户表中不存在 A 微服务用户。

如何使用 JWT Token 维护微服务之间的安全 api 通信?

【问题讨论】:

'每个微服务都有自己的数据库和用于存储用户名和密码的用户表。 ' - 这是错误的,您应该拥有存储凭据的单一身份验证服务。所有其他服务只共享 JWT 签名密钥来验证 JWT 令牌。通常整个用户配置文件都存储在 JWT 令牌中,因此不需要对数据库或身份验证服务器的任何其他请求。 谢谢@AlexChernyshev... 【参考方案1】:

在微服务架构中,我们需要有一个单独的微服务 Auth Service。所有请求都将在 API Gateway 上针对此 Auth 服务进行验证。 Auth 服务将为有效请求返回 JWT,并将其传递给所有微服务。

您可以参考以下内容以获得更好的理解:

https://microservices.io/patterns/security/access-token.html https://microservices.io/patterns/apigateway.html

【讨论】:

以上是关于使用 JWT 的微服务认证和授权的主要内容,如果未能解决你的问题,请参考以下文章

springcloud项目多个微服务中,jwt鉴权的代码应该放在哪个服务中?

用户注册+与kong集成的微服务的身份验证

权限设计系列「认证授权专题」微服务中的JWT协议以及全方面指南

微服务的用户认证与授权杂谈(下)

微服务架构认证鉴权方案

微服务如何在异步通信中做授权?