Spring Security:如何将UserDetailsS​​ervice与JwtAuthenticationProvider结合使用?

我有一个使用Spring MVC编写的REST服务。该服务器是OAuth2资源服务器,我正在使用JwtAuthenticationProvider将JWT解析并转换为Principal。一切正常。

但是,我真正想做的是使用JWT中Claim所提供的用户名从数据库中加载用户详细信息。然后,新的Principal应该替换或(理想情况下)包装Jwt,以便可以直接从SecurityContext获得它。

我真的很想知道如何做到这一点。 JwtAuthenticationProvider似乎不适用于UserDetailsS​​ervice。我还考虑了使用Converter进行此操作-但是扩展JwtAuthenticationConverter并不容易,因为convert方法是最终的(为什么?)。

非常清楚,这是我理想中想要发生的事情:

  1. 承载令牌已提供给服务。
  2. 解析Jwt并提取声明
  3. 使用这些声明之一作为我的用户数据库的密钥,我可以在其中查找属性,权利等
  4. 将它们转换为一个新的Principal对象,该对象在SecurityContext的Authentication对象中可用。

我的WebSecurityConfigurerAdapter中的configure方法具有以下内容:

http.authorizeRequests().antMatchers("/api/*").authenticated().and().oauth2ResourceServer().jwt();

我不是唯一想与OAuth2一起使用用户数据库的人,所以我一定缺少基本知识吗?我正在使用Spring Security 5.2.0。

zrzrzr0527 回答:Spring Security:如何将UserDetailsS​​ervice与JwtAuthenticationProvider结合使用?

我同意您的担心-我发现重写Spring的默认处理很有用。

我有一个声明缓存模式 使用,其中JWT处理只是其中一部分:https://authguidance.com/2017/10/03/api-tokens-claims/

我有一个可以运行的Spring Boot代码示例-它使用了自定义过滤器和Connect2Id类-此处描述了OAuth集成: https://authguidance.com/2019/03/24/java-spring-boot-api-oauth-coding/

OAuth特定的类在这里,如果您只想浏览一些代码:https://github.com/gary-archer/authguidance.apisample.javaspringboot/tree/master/src/main/java/com/mycompany/sample/framework/api/oauth/security

如果有帮助,很乐意回答任何后续问题

本文链接:https://www.f2er.com/3169899.html

大家都在问