使用 JWT 的微服务认证和授权
Posted
技术标签:
【中文标题】使用 JWT 的微服务认证和授权【英文标题】:Microservice Authentication and Authorization using JWT 【发布时间】:2020-11-29 05:50:27 【问题描述】:我创建了两个微服务让 A 和 B。每个微服务都有自己的数据库和用于存储用户名和密码的用户表。我正在维护相同的签名密钥以在所有微服务中生成密钥。
微服务的用户可以轻松访问其微服务的安全 API。但是假设我想访问 B 微服务的安全 api,那么它会在使用 UserDetailsService 在 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鉴权的代码应该放在哪个服务中?