【问题标题】:Get current authenticated user from all other microservices从所有其他微服务获取当前经过身份验证的用户
【发布时间】:2026-01-28 17:55:02
【问题描述】:

我正在使用 Spring 创建一个具有微服务架构的项目。我有用于集中安全管理的 zuul,以及其他一些微服务。 要访问当前经过身份验证的用户,在 zuul 中我使用这行代码:

SecurityContextHolder.getContext().authentication

但是为了从其他微服务获取用户,我从每个请求的标头中提取令牌 (jwt),然后从声明中提取用户信息,但我发现这种方法有点烦人。 那么,还有其他更漂亮的方法吗? 我尝试在其他微服务中添加spring security的依赖项来使用:

SecurityContextHolder.getContext().authentication

但每次我通过 zuul 执行请求时,即使从那里完成身份验证,我也会收到未经授权的错误消息,尽管已禁用这些微服务的安全自动配置。

有什么建议吗?

【问题讨论】:

  • 您好,您找到这个问题的解决方案了吗?我也有同样的情况。我找到了这个medium.com/@Baimurzin/…,但我不确定......

标签: spring spring-security microservices


【解决方案1】:

在您在 Spring SecurityContext 中设置主体对象之前,使用 SecurityContextHolder.getContext().authentication 在其他微服务中不起作用。

我不知道您为什么要在 Zuul 的安全上下文中设置主体并在那里提取相同的内容,但是应该在 Zuul 进行身份验证和令牌验证,并且应该在标头中将相同的 jwt 发送到后端微服务。 现在在后端微服务中,通过使用 spring security,从 jwt 中提取所需的声明并放入 SecurityContextHolder 一次,这样您就可以进一步利用它来进行请求授权或方法级别的授权。

【讨论】:

    最近更新 更多