Как получить область и роли на сервере ресурсов весенней загрузки Oauth2/2.1?
Как получить область и роли на сервере ресурсов весенней загрузки Oauth2/2.1?
Authentication authentication = getAuthentication();
System.out.println(authentication.getAuthorities());
Authorities
возвращает только область видимости.
Вот мой жетонintrospect
{
"active": true,
"sub": "0f370b1e-e3a9-4ee3-a8a3-21bbb3437c16",
"aud": [
"1"
],
"nbf": 1679019352,
"scope": "read",
"roles": [
"user"
],
"iss": "http://3.6.239.198:9000",
"exp": 1679022352,
"iat": 1679019352,
"client_id": "1",
"token_type": "Bearer"
}
Как получитьrole
на сервере ресурсов?
2 ответа
СозданныйCustomAuthenticationConverter
заменитьscope
сroles
@Configuration
@EnableWebSecurity
public class OAuth2ResourceServerSecurityConfiguration {
@Value("${spring.security.oauth2.resourceserver.jwt.issuer-uri}")
private String authServerBaseUrl;
interface Jwt2AuthoritiesConverter extends Converter<Jwt, Collection<? extends GrantedAuthority>> {
}
List<String> publicApis = List.of("/login", "/rest/**", "/token",
"/swagger-ui/**", "/v3/api-docs/**", "/vendor/**", "/favicon.ico");
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http.anonymous().disable();
http.cors().and().authorizeHttpRequests(authorize -> authorize
.requestMatchers(publicApis.stream()
.map(AntPathRequestMatcher::new)
.toArray(RequestMatcher[]::new)).permitAll()
.anyRequest().authenticated()).csrf().disable();
http.oauth2ResourceServer(oauth2 -> oauth2
.jwt(jwt -> jwt
.jwtAuthenticationConverter(new CustomAuthenticationConverter())
)
);
return http.build();
}
static class CustomAuthenticationConverter implements Converter<Jwt, AbstractAuthenticationToken> {
public AbstractAuthenticationToken convert(Jwt jwt) {
Collection<String> authorities = jwt.getClaimAsStringList("roles");
Collection<GrantedAuthority> grantedAuthorities = authorities.stream()
.map(SimpleGrantedAuthority::new)
.collect(Collectors.toList());
return new JwtAuthenticationToken(jwt, grantedAuthorities);
}
}
}
Чтобы получить роли:
Authentication authentication = getAuthentication();
authentication.getAuthorities()
Ссылаться :-
Сервер авторизации -> https://github.com/m-thirumal/oauth-authorization-server/
Ресурсный сервер -> https://github.com/m-thirumal/oauth-resource-serverhttps://github.com/m-thirumal/oauth-resource-server
Вы предоставляете преобразователь аутентификации при настройке сервера ресурсов в вашемSecurityFilterChain
:http.oauth2ResourceServer().jwtAuthenticationConverter(...)
Множество примеров в написанных мною уроках: https://github.com/ch4mpy/spring-addons/tree/master/samples/tutorials .