在我的Sping Boot 项目中,我使用Auth0
我需要从Auth0 jwt令牌读取权限,然后使用它们来评估hasAuthority。
尽管我做了所有的努力,我还是不能从权限中读取,尽管我创建了一个自定义的JwtAuthenticationConverter来这样做
我保存了下面的JWT令牌(我删除了一些字符,所以这里没有共享合理的数据):
{
"iss": "https://dev-hxo7qtywv.eu.auth0.com/",
"sub": "google-oauth2|10344498554237",
"aud": [
"https://test/api",
"https://dev-hxo7qtywv.eu.auth0.com/userinfo"
],
"iat": 17010717,
"exp": 17019317,
"azp": "dv1rEpS37p9jaGIPXO0S5fnjMh",
"scope": "openid profile email offline_access",
"permissions": [
"read:admin",
"SCOPE_read:admin"
]
}
字符串
这是我的SecurityFilterChain类内容的一部分
@Bean
public JwtAuthenticationConverter customJwtAuthenticationConverter() {
JwtGrantedAuthoritiesConverter grantedAuthoritiesConverter = new JwtGrantedAuthoritiesConverter();
grantedAuthoritiesConverter.setAuthoritiesClaimName("permissions");
JwtAuthenticationConverter jwtAuthenticationConverter = new JwtAuthenticationConverter();
jwtAuthenticationConverter.setJwtGrantedAuthoritiesConverter(grantedAuthoritiesConverter);
return jwtAuthenticationConverter;
}
型
和
.requestMatchers("/api/test/admin").hasAuthority("read:admin")
型
和
http.oauth2ResourceServer(oauth2 -> oauth2
.jwt(jwt -> jwt.jwtAuthenticationConverter(customJwtAuthenticationConverter())));
型
我检查了控制器中的权限,看到以下内容:
Authority: SCOPE_openid
Authority: SCOPE_profile
Authority: SCOPE_email
Authority: SCOPE_offline_access
型
你知道为什么Sping Boot 不使用我的customJwtAuthenticationConverter吗?
1条答案
按热度按时间raogr8fs1#
找到了解决方案。在最新的库中,您只能通过以下方式配置它(在application.yml中)
字符串