从所有其他微服务获取当前经过身份验证的用户

时间:2019-08-23 06:45:54

标签: spring spring-security microservices

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

SecurityContextHolder.getContext().authentication

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

SecurityContextHolder.getContext().authentication

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

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

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

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

相关问题