with secure mkyong example baeldung autoconfigure and java spring-security spring-security-oauth2

java - secure - Cómo agregar filtro después de HTTP BasicAuthenticationFilter al usar @EnableAuthorizationServer



spring-security-oauth2 maven (1)

Estoy tratando de revisar la siguiente documentación: https://github.com/spring-projects/spring-security-oauth/blob/f25592e682303b0cf89e1d7555174bac18e174df/docs/oauth2.md#mapping-user-roles-to-scopes

En la documentación, dice que para asignar funciones de usuario a ámbitos, junto con la configuración de checkUserScopes=true en DefaultOAuth2RequestFactory , necesitamos agregar el filtro TokenEndpointAuthenticationFilter después de HTTP BasicAuthenticationFilter . Me preguntaba cómo se podría hacer eso.

Aquí es donde se ve mi AuthorizationServer:

@Configuration @EnableAuthorizationServer protected static class OAuth2Config extends AuthorizationServerConfigurerAdapter { @Autowired private AuthenticationManager authenticationManager; @Autowired private OAuth2RequestFactory requestFactory; @Override public void configure(AuthorizationServerEndpointsConfigurer endpoints) { endpoints.authenticationManager(authenticationManager); endpoints.requestFactory(requestFactory); } @Override public void configure(ClientDetailsServiceConfigurer clients) throws Exception { clients.withClientDetails(clientDetailsService()); } @Override public void configure(AuthorizationServerSecurityConfigurer oauthServer) throws Exception { oauthServer.checkTokenAccess("isAuthenticated()"); } @Bean public ClientDetailsService clientDetailsService() { Map<String, ClientDetails> clientDetailsStore = new HashMap<String, ClientDetails>(); Collection<String> scope = new HashSet<String>(); scope.add("user"); scope.add("admin"); Collection<String> authorizedGrantTypes = new HashSet<String>(); authorizedGrantTypes.add("password"); authorizedGrantTypes.add("refresh_token"); BaseClientDetails clientDetails = new BaseClientDetails(); clientDetails.setClientId("client"); clientDetails.setClientSecret("secret"); clientDetails.setScope(scope); clientDetails.setAuthorizedGrantTypes(authorizedGrantTypes); clientDetailsStore.put("client", clientDetails); InMemoryClientDetailsService clientDetailsService = new InMemoryClientDetailsService(); clientDetailsService.setClientDetailsStore(clientDetailsStore); return clientDetailsService; } @Bean public OAuth2RequestFactory requestFactory() { DefaultOAuth2RequestFactory requestFactory = new DefaultOAuth2RequestFactory(clientDetailsService()); requestFactory.setCheckUserScopes(true); return requestFactory; } }

Además, sería fantástico proporcionar un CURL de muestra sobre cómo podemos probar la contraseña tipo concesión.

Apreciar cualquier ayuda!


En lugar de utilizar @EnableAuthorizationServer , debería poder extender AuthorizationServerSecurityConfiguration e incluirlo en su configuración de Spring. P.ej

@Configuration public class OAuth2Config extends AuthorizationServerSecurityConfiguration { @Override protected void configure(HttpSecurity http) throws Exception { super.configure(http); http.addFilterAfter(myFilter(), BasicAuthenticationFilter.class); } }