У меня есть сервер авторизации, встроенный в .Net Core, использующий Identity Server 4 ! Он работает, как ожидается, для авторизации клиентов и ресурсов из Node Js и .Net. Теперь я пытаюсь добавить Java Spring Boot 2 API (jdk 1.8) в качестве защищенного ресурса. Я достиг этой цели с помощью OAuth2 Boot Documentation ! Пока все отлично работает. Теперь мне нужно извлечь заявки из токена доступа, сгенерированного сервером авторизации. Это токен на предъявителя типа JWT. Реализация, которую я имею для этого, следующая:
@Configuration
@EnableResourceServer
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfiguration extends ResourceServerConfigurerAdapter {
public String resourceId;
@Autowired
public SecurityConfiguration(@Value("${security.oauth2.resource.id}") String resourceId) {
this.resourceId = resourceId;
}
@Override
public void configure(ResourceServerSecurityConfigurer resources) {
resources.resourceId(this.resourceId);
}
@Override
public void configure(HttpSecurity httpSecurity) throws Exception {
httpSecurity
.csrf()
.disable()
.authorizeRequests()
.antMatchers("/swagger-ui.html", "/webjars/**", "/swagger-resources/**", "/**/api-docs/**", "/actuator/**")
.permitAll()
.and()
.authorizeRequests().anyRequest().fullyAuthenticated();
}
Проблема в том, что когда я пытаюсь получить доступ к утверждениям внутри контроллера, они не доступны. Я проверил метод extractAuthentication по умолчанию из DefaultAccessTokenConverter, внутри Spring Spring, и действительно, он игнорирует все утверждения, отличные от заданных по умолчанию. Мне в голову приходит создание нового конвертера, расширяющего конвертер DefaultAccessToken, следующим образом:
@Component
public class CustomAccessTokenConverter extends DefaultAccessTokenConverter {
@Override
public OAuth2Authentication extractAuthentication(Map<String, ?> claims) {
OAuth2Authentication authentication = super.extractAuthentication(claims);
authentication.setDetails(claims);
return authentication;
}
}
Но я не выяснил, куда вводить или ссылаться на этот новый конвертер.