jwt中不存在的角色应该添加到身份验证对象的何处?

uemypmqf  于 2021-07-23  发布在  Java
关注(0)|答案(2)|浏览(737)

我们有一个spring引导服务器,它使用jwt令牌对用户进行身份验证。应根据用户的身份为其分配角色。
授予令牌的服务器不知道用户在每个系统中应该具有哪些角色,因此每个系统应该基于用户的标识授予角色。
比如:
验证用户身份。
(用户已通过身份验证)在安全上下文中查找用户具有哪些角色并将其添加到身份验证中。
检查角色。例如, @PreAuthorize(hasRole('some_role')) 我的问题是:
我该怎么做?或者,我不应该这样做,以另一种方式处理情况?

vptzau2j

vptzau2j1#

如前所述, JwtAuthenticationConverter 是预期的配置点。
Spring 保安会把它作为 @Bean :

@Bean
JwtAuthenticationConverter jwtAuthenticationConverter() {
    JwtAuthenticationConverter converter =
        new JwtAuthenticationConverter();
    converter.setJwtGrantedAuthoritiesConverter(...);
    return converter;
}

正如在另一个答案中已经指出的,您也可以在dsl上设置一个。
您可以在参考资料中阅读更多内容:https://docs.spring.io/spring-security/site/docs/5.4.4/reference/html5/#oauth2resourceserver-jwt授权提取

jv2fixgn

jv2fixgn2#

我找到了一个方法,通过使用自定义 jwtAuthenticationConverter .

http
            ...
            ?.oauth2ResourceServer()
            ?.jwt()
            ?.jwtAuthenticationConverter(customConverter)
@Component
class CustomConverter(
    private val jwtGrantedAuthoritiesConverter: JwtGrantedAuthoritiesConverter
) : Converter<Jwt, AbstractAuthenticationToken> {

    override fun convert(jwt: Jwt): AbstractAuthenticationToken {
      // Custom logic that adds roles
    }
}

相关问题