tag lib form spring spring-security oauth-2.0 access-token spring-security-oauth2

spring - form - tag lib jstl



¿Cómo usar RemoteTokenService? (2)

Tengo la siguiente configuración:

@Configuration @EnableWebSecurity @EnableAuthorizationServer public class OAuthSecurityConfig extends AuthorizationServerConfigurerAdapter { // ... @Override public void configure(AuthorizationServerSecurityConfigurer oauthServer) throws Exception { // (!) oauthServer.allowFormAuthenticationForClients(); } // ...

Agregué la siguiente línea:

oauthServer.checkTokenAccess("permitAll()");

en la línea con "(!)" para arreglar el mismo problema.

Tengo un ResourceServer separado creado usando Spring-Security-oauth2. Aquí está el código RemoteTokenService.

@Bean public ResourceServerTokenServices tokenService() { RemoteTokenServices tokenServices = new RemoteTokenServices(); tokenServices.setClientId("sample_test_client_app"); tokenServices.setClientSecret("secret"); tokenServices.setCheckTokenEndpointUrl("http://localhost:8080/oauth/check_token"); return tokenServices; }

Cuando estoy accediendo al servidor de recursos con AccessToken obtengo lo siguiente:

FilterSecurityInterceptor - Secure object: FilterInvocation: URL: /oauth/check_token; Attributes: [denyAll()] FilterSecurityInterceptor - Previously Authenticated: org.springframework.security.authentication.UsernamePasswordAuthenticationToken@c3f3b25: Principal: org.springframework.security.core.userdetails.User@3c0cd8e: Username: sample_test_client_app; Password: [PROTECTED]; Enabled: true; AccountNonExpired: true; credentialsNonExpired: true; AccountNonLocked: true; Not granted any authorities; Credentials: [PROTECTED]; Authenticated: true; Details: org.springframework.security.web.authentication.WebAuthenticationDetails@957e: RemoteIpAddress: 127.0.0.1; SessionId: null; Not granted any authorities AffirmativeBased - Voter: org.springframework.security.web.access.expression.WebExpressionVoter@6172e10, returned: -1 ExceptionTranslationFilter - Access is denied (user is not anonymous); delegating to AccessDeniedHandler

¿Alguien puede decirme qué está mal con mi configuración?

Actualización: configuración de seguridad My Spring.

@Configuration @EnableWebSecurity public class SecurityConfiguration extends WebSecurityConfigurerAdapter { @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.inMemoryAuthentication().withUser("developer").password("developer").roles("USER"); } @Override public void configure(WebSecurity web) throws Exception { web.ignoring().antMatchers("/webjars/**", "/images/**", "/oauth/uncache_approvals", "/oauth/cache_approvals"); } @Override @Bean public AuthenticationManager authenticationManagerBean() throws Exception { return super.authenticationManagerBean(); } @Override protected void configure(HttpSecurity http) throws Exception { // @formatter:off http .authorizeRequests().antMatchers("/login.jsp").permitAll().and() .authorizeRequests().antMatchers("/oauth/check_token").permitAll().and() .authorizeRequests() .anyRequest().hasRole("USER") .and() .exceptionHandling() .accessDeniedPage("/login.jsp?authorization_error=true") .and() .logout() .logoutSuccessUrl("/index.jsp") .logoutUrl("/logout.do") .and() .formLogin(); // @formatter:on } }

La configuración de mi servidor de autenticación.

@Configuration @EnableAuthorizationServer protected static class AuthorizationServerConfiguration extends AuthorizationServerConfigurerAdapter { @Autowired private TokenStore tokenStore; @Autowired private UserApprovalHandler userApprovalHandler; @Autowired @Qualifier("authenticationManagerBean") private AuthenticationManager authenticationManager; @Override public void configure(ClientDetailsServiceConfigurer clients) throws Exception { // @formatter:off clients .inMemory() .withClient("sample_test_client_app") .secret("secret") .authorizedGrantTypes("client_credentials","authorization_code") .authorities("ROLE_CLIENT") .resourceIds(CHANAKYA_RESOURCE_ID) .scopes("read","write"); // @formatter:on } @Bean public TokenStore tokenStore() { return new InMemoryTokenStore(); } @Override public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception { endpoints.tokenStore(tokenStore).userApprovalHandler(userApprovalHandler) .authenticationManager(authenticationManager); } @Override public void configure(AuthorizationServerSecurityConfigurer oauthServer) throws Exception { oauthServer.realm("resource_server/client"); } }


En el servidor de recursos, tengo una URL segura, por ejemplo, "datos / usuarios" a la que se accede solo si la aplicación "cliente" tiene el rol "ROLE_CLIENT". Aquí estoy usando RemoteTokenService y tengo un cliente configurado en el servidor oauth con la función "ROLE_CLIENT" con la concesión client_credential. ¿Cómo puede mi cliente acceder a esta URL?

Todas las solicitudes deben incluir autorización con el tipo ''Portador'' y token:

> curl "https://localhost:8080/users/me" -H "Pragma: no-cache" -H "Origin: > http://localhost:8080" -H "Accept-Encoding: gzip,deflate" -H > "Accept-Language: en-US,en;q=0.8,es;q=0.6" -H "Authorization: Bearer > f07abd25-af1f-44e2-XXXX-ba5071168XXX" -H "Accept: */*" -H > "Cache-Control: no-cache" -H "User-Agent: Mozilla/5.0 (Windows NT 6.1; > WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 > Safari/537.36" -H "Connection: keep-alive" -H "Referer: > http://localhost:8080/test.html" --compressed

como estoy utilizando RemoteTokenService mi token se verificará a través de "/ oauth / check_token" (CheckTokenEndpoint). que no dan ninguna información sobre la función del cliente. Entonces, ¿cómo puedo comparar el rol de los clientes?

La seguridad de primavera tiene toda la información requerida. Todo lo que necesita hacer es asegurar su punto final. En mi caso:

@PreAuthorize("hasAnyAuthority(''USER_READ'')")

En este caso, solo el usuario con la función ''USER_READ'' puede obtener acceso a mi punto final.

Siéntase libre de hacer cualquier pregunta adicional.