Korzystanie z obu konfiguracji na tej samej prośbie byłoby niejednoznaczne. Nie może być pewne rozwiązanie, ale bardziej jasne zdefiniowanie oddzielnych grup żądanie:
- OAuth2Sso: dla użytkowników pochodzących z przeglądarki, chcemy przekierować je do dostawcy uwierzytelniania za symboliczną
- ResourceServer: zwykle żądań API, pochodzących z tokena dostali skądś (najprawdopodobniej od tego samego dostawcy uwierzytelniania)
dla osiągnięcia tego celu, należy oddzielić konfiguracje z prośbą dopasowującego:
@Configuration
@EnableResourceServer
public class ResourceServerConfiguration extends ResourceServerConfigurerAdapter {
@Bean("resourceServerRequestMatcher")
public RequestMatcher resources() {
return new AntPathRequestMatcher("/resources/**");
}
@Override
public void configure(final HttpSecurity http) throws Exception {
http
.requestMatcher(resources()).authorizeRequests()
.anyRequest().authenticated();
}
}
i uwzględniają je z łańcucha filtrów SSO:
@Configuration
@EnableOAuth2Sso
public class SsoSecurityConfiguration extends WebSecurityConfigurerAdapter {
@Autowired
@Qualifier("resourceServerRequestMatcher")
private RequestMatcher resources;
@Override
protected void configure(final HttpSecurity http) throws Exception {
RequestMatcher nonResoures = new NegatedRequestMatcher(resources);
http
.requestMatcher(nonResoures).authorizeRequests()
.anyRequest().authenticated();
}
}
i umieścić wszystkie swoje zasoby pod /resources/**
oczywiście w tym przypadku zarówno użyje tego samego OAuth2 konfigurację (accessTokenUri
, jwt.key-value
itp.)
UPDATE1:
Właściwie można osiągnąć swój pierwotny cel za pomocą tego żądania dopasowywania do powyższej konfiguracji:
new RequestHeaderRequestMatcher("Authorization")
Update2: (Objaśnienie @ sid-Morad komentarza)
Wiosna Bezpieczeństwa tworzy filtr łańcuch dla każdej konfiguracji. Element dopasowujący żądanie dla każdego łańcucha filtrów jest oceniany w kolejności konfiguracji. WebSecurityConfigurerAdapter
ma domyślną kolejność 100, a ResourceServerConfiguration
jest domyślnie sortowana 3. Co oznacza, że najpierw jest oceniany matcher wniosku. Ta kolejność może być zmieniona dla tych konfiguracjach, takich jak:
@Configuration
@EnableResourceServer
public class ResourceServerConfiguration extends ResourceServerConfigurerAdapter {
@Autowired
private org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfiguration configuration;
@PostConstruct
public void setSecurityConfigurerOrder() {
configuration.setOrder(3);
}
...
}
@Configuration
@EnableOAuth2Sso
@Order(100)
public class SsoSecurityConfiguration extends WebSecurityConfigurerAdapter {
...
}
Więc tak, prośba dopasowujący nie jest potrzebna do SsoSecurityConfiguration
w powyższej próbie. Ale dobrze znać powody za :)
Twoja odpowiedź była pomocna dla mnie, dzięki! i chciałbym wskazać na "nowy element NegatedRequestMatcher (zasoby)" w moim przypadku nie było konieczne. –
Cześć, dzięki! Skierowałem Twój komentarz w sekcji UPDATE2 mojego oryginalnego wpisu. – plajko