如何在微服务架构中传播用户详细信息(用户名)

问题描述 投票:0回答:1

我正在为以下主题的架构而苦苦挣扎。

用户 --> UI --> A --> B --> C

(为了举例,我将架构减少到只有 4 个应用程序)

UI – 为 UI 提供静态资源并将请求转发到正确的微服务(使用 Spring Cloud Gateway)的网关应用程序。

A、B、C – Spring Boot 应用程序通过使用 feign 客户端/webclient/resttemplate 完成的 REST 调用相互通信。

技术:

  • Spring Boot – 2.7.1
  • Spring 安全 – 5.7.2
  • 带有不记名令牌的 OAuth2

我的挑战是在应用程序 B 或 C 中识别发起请求的用户。

我已经有了一些想法,但我也想知道你的建议。

spring microservices spring-security-oauth2
1个回答
0
投票

如果您需要传播用户身份并将此逻辑封装在 JWT 访问令牌中,则无法使用客户端凭据来获取访问令牌以传递给下游服务,有两个基本选项

  • 代币兑换
  • 令牌中继

如果您不希望访问令牌包含太多权限,那么令牌交换是更好的选择。令牌中继意味着 A 收到的令牌具有 A、B、C 的

aud
,并且 A、B、C 所需的所有声明和 A 只是将该访问令牌下游传递给 B,B 也将其中继给 C。意味着如果 A 想要调用 B,它需要将其收到的访问令牌与授权服务器交换为调用 B 的令牌。此访问令牌将具有 B 的
aud
,并且还包含
sub
声明:标识资源所有者用户身份。

从实现的角度来看,目前 Spring 项目仅内置对 Token Relay 的支持。

如果您使用 Spring Security,目前没有内置支持 Spring Security OAuth2 客户端进行令牌交换。您可以在https://github.com/spring-projects/spring-security/issues/5199跟踪问题。

如果您使用 Spring Authorization Server,目前也没有内置支持实现令牌交换。您可以在https://github.com/spring-projects/spring-authorization-server/issues/60跟踪问题。

© www.soinside.com 2019 - 2024. All rights reserved.