Hallo Ich habe eine Web-Anwendung mit Spring-Sicherheit gesichert, mit einer Login-Seite. Dies ist meine SicherheitskonfigurationSpring OAUTH - anderer Login für Web e REST
Dies funktioniert gut, indem Sie alle meine Webanwendung sichern.
In der gleichen Anwendung habe ich auch eine Ressource/Authorization Server zum Schutz einiger REST API.
Einige Ressourcen sind mit einem Berechtigungscode geschützt, daher sollte die nicht vertrauenswürdige Mobile App das Zugriffstoken von meiner Anwendung mit einem Anmeldeformular übernehmen. Ich möchte, dass die Anwendung eine andere Anmeldeseite verwendet, wenn sie versucht, sich von der Mobile App aus anzumelden.
Dies ist meine resourceServer Konfiguration
@EnableResourceServer
@ComponentScan("it.besmart.easyparking")
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class ResourceServerConfig {
private final Logger logger = LoggerFactory.getLogger(ResourceServerConfig.class);
@Autowired
DataSource dataSource;
private static final String RESOURCE_ID = "easyparking_api";
@Configuration
// @Order(2)
public class grantCredentialsConfiguration extends ResourceServerConfigurerAdapter {
@Override
public void configure(HttpSecurity http) throws Exception {
logger.debug("Api security configured");
http
.requestMatchers().antMatchers("/api/oauth/**").and().authorizeRequests()
.antMatchers("/api/oauth/**").access("hasRole('USER')").and().formLogin().loginPage("/apilogin")
.permitAll();
}
@Override
public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
resources.tokenStore(tokenStore()).resourceId(RESOURCE_ID);
}
}
@Configuration
// @Order(4)
public class clientCredentialsConfiguration extends ResourceServerConfigurerAdapter {
@Override
public void configure(HttpSecurity http) throws Exception {
logger.debug("Client security configured");
http
.requestMatchers().antMatchers("/oauth2/**", "/api/registration", "/api/park/**").and()
.authorizeRequests().antMatchers("/oauth2/**", "/api/registration", "/api/park/**").authenticated();
}
@Override
public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
resources.tokenStore(tokenStore()).resourceId(RESOURCE_ID);
}
}
@Bean
public TokenStore tokenStore() {
return new JdbcTokenStore(dataSource);
}
}
so, grantCredentialsConfiguration
sollten die Anforderungen an/apilogin Form umleiten, aber es funktioniert nicht, bin ich auf die wichtigsten Web-App-Anmeldeseite weitergeleitet ... Wie es sein kann, vollbracht?
EDIT
Bei näherer Betrachtung in die Protokolle, sieht es so aus, dass, wenn ich versuche,/zu treffen oauth/genehmigen/die normale Sicherheitskette stattfindet, und ich bekommt
2017-05-25 12:23:15 DEBUG o.s.security.web.FilterChainProxy[310] - /oauth/authorize?response_type=token&client_id=test&redirect_uri=https://www.getpostman.com/oauth2/callback reached end of additional filter chain; proceeding with original chain
2017-05-25 12:23:15 DEBUG o.s.s.o.p.e.FrameworkEndpointHandlerMapping[310] - Looking up handler method for path /oauth/authorize
2017-05-25 12:23:15 DEBUG o.s.s.o.p.e.FrameworkEndpointHandlerMapping[317] - Returning handler method [public org.springframework.web.servlet.ModelAndView org.springframework.security.oauth2.provider.endpoint.AuthorizationEndpoint.authorize(java.util.Map<java.lang.String, java.lang.Object>,java.util.Map<java.lang.String, java.lang.String>,org.springframework.web.bind.support.SessionStatus,java.security.Principal)]
2017-05-25 12:23:15 DEBUG o.s.s.w.a.ExceptionTranslationFilter[163] - Authentication exception occurred; redirecting to authentication entry point
org.springframework.security.authentication.InsufficientAuthenticationException: User must be authenticated with Spring Security before authorization can be completed.
So sieht es aus wie nach einem Handler zu suchen, um die Anfrage zu verwalten, anstatt nach/api/apfilogin wie gewünscht umzuleiten, findet er eine Authentication exception
und so gehe ich auf die Standard-Login-Seite ... Aber warum bekomme ich diese Ausnahme?
Dank für die Antwort, ich versuchte, aber ich weiterhin auf die Web-App-Anmeldeseite umgeleitet werden soll, wird apilogin nie – besmart