【发布时间】:2020-02-29 06:50:20
【问题描述】:
我有一个使用 Spring MVC 编写的 REST 服务。该服务器是一个 OAuth2 资源服务器,我使用 JwtAuthenticationProvider 来解析 JWT 并将其转换为 Principal。这一切都很好。
但是,我真正想做的是使用 JWT 中声明提供的用户名从数据库加载用户详细信息。然后,新的 Principal 应该替换或(理想情况下)包装 Jwt,以便它可以直接从 SecurityContext 中使用。
我真的很想知道如何做到这一点。 JwtAuthenticationProvider 似乎不适用于 UserDetailsService。我还研究了使用 Converter 进行此操作 - 但扩展 JwtAuthenticationConverter 并不容易,因为 convert 方法是最终的(为什么?)。
所以要非常清楚,这是我理想中想要发生的事情:
- 不记名令牌已提交给服务。
- 解析 Jwt 并提取声明
- 使用这些声明之一作为我的用户数据库的键,我可以在其中查找属性、权利等
- 将这些转换为新的 Principal 对象,该对象在 SecurityContext 的 Authentication 对象中可用。
我的 WebSecurityConfigurerAdapter 中的 configure 方法是这样的:
http.authorizeRequests().antMatchers("/api/*").authenticated().and().oauth2ResourceServer().jwt();
我不可能是唯一一个想将用户数据库与 OAuth2 一起使用的人,所以我一定缺少一些基本的东西吗?我正在使用 Spring Security 5.2.0。
【问题讨论】:
-
我一直在想同样的事情!您是否能够确定这是否真的受支持?
标签: spring spring-security oauth-2.0 jwt