Hallo Ich bin neu zu Frühling Sicherheit und versuchen, herauszufinden, wie Authentifizierung Auth-Server Tokens zu konfigurieren. das Problem, das ich jetzt habe, ist, dass ich Cors 401 oder 403 auf den Preflight-Anfragen bin zu empfangen und nicht sicher, wie unten zu lösen ist ein Barebone Implementierung basiert sie auf einige TutorialsFrühling CorsFilter scheint nicht zu arbeiten immer noch ein 401 auf Preflight-Anfragen
https://spring.io/blog/2015/06/08/cors-support-in-spring-framework http://www.baeldung.com/spring-security-oauth-jwt
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity
@PropertySource(value = "classpath:oauth.properties")
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
UserRepository userRepository;
@Override
protected void configure(AuthenticationManagerBuilder auth)
throws Exception {
auth.authenticationProvider(authenticationProvider());
}
@Override
public void configure(WebSecurity web) throws Exception {
super.configure(web);
}
@Autowired
ObjectMapper mapper;
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
http.authorizeRequests().antMatchers(HttpMethod.OPTIONS,"/oauth/token").permitAll()
.anyRequest().authenticated();
}
@Override
@Bean
public AuthenticationManager authenticationManagerBean() throws Exception {
return super.authenticationManagerBean();
}
@Override
protected void configure(final AuthenticationManagerBuilder auth) throws Exception{
auth.inMemoryAuthentication().
withUser("john").password("123").roles("USER").
and().
withUser("tom").password("111").roles("ADMIN");
}
@Bean
public FilterRegistrationBean corsFilter() {
FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter2());
bean.setOrder(0);
return bean;
}
}
@Configuration
@EnableAuthorizationServer
public class OAuth2ServerConfig extends AuthorizationServerConfigurerAdapter{
@Autowired
private Environment env;
@Autowired
@Qualifier("authenticationManagerBean")
private AuthenticationManager authenticationManager;
@Override
public void configure(AuthorizationServerSecurityConfigurer oauthServer){
oauthServer.tokenKeyAccess("permitAll()").checkTokenAccess("isAuthenticated()");
}
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception{
clients.inMemory().withClient("acme").secret("acmesecret").authorizedGrantTypes("authorization_code", "refresh_token",
"password").scopes("openId");
}
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints){
final TokenEnhancerChain tokenEnhancerChain = new TokenEnhancerChain();
tokenEnhancerChain.setTokenEnhancers(Arrays.asList(tokenEnhancer(),accessTokenConverter()));
endpoints.tokenStore(tokenStore())
.tokenEnhancer(tokenEnhancerChain)
.authenticationManager(authenticationManager);
}
@Bean
public JwtAccessTokenConverter accessTokenConverter(){
final JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
return converter;
}
@Bean
public TokenStore tokenStore(){
return new JwtTokenStore(accessTokenConverter());
}
@Bean
public FilterRegistrationBean corsFilter() {
FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter2());
bean.setOrder(0);
return bean;
}
@Bean
@Primary
public DefaultTokenServices tokenServices() {
DefaultTokenServices defaultTokenServices = new DefaultTokenServices();
defaultTokenServices.setTokenStore(tokenStore());
defaultTokenServices.setSupportRefreshToken(true);
return defaultTokenServices;
}
}
Der CorsFilter2 ist ein Feder-Cors-Filter, der im Frühjahr 4.2 eingeführt wurde. Ich benutzte ihn, um die richtigen Antwort-Header einzufügen, um sie an den Kunden zurückzusenden. CoresRequest Anfrage auch ignorieren so im Inneren des configure-Block für die WebSecurity musste ich setzen Sie diesen
web.ignoring().requestMatchers(CorsUtils::isPreFlightRequest);
Hey Mann wo hast du es konfiguriert, bekomme ich: '' 'Die Methode Ignoring() ist nicht definiert für den Typ ExpressionUrlAuthorizationConfigurer .ExpressionInterceptUrlRegistry''' wenn ich es nach''authorizeRequests''' und' '' Die Methode Ignoring() ist nicht definiert für den Typ HttpSecurity '' '' direkt nach http –
mattobob
@mattobob Ich habe es der configure-Methode in meiner SecurityConfig hinzugefügt die Methodensignatur sollte in etwa so aussehen \t public void configure (WebSecurity web) löst Ausnahme {} aus – jcdevbot