В попытке разработать общую службу идентификации для проекта, над которым я работаю, мне необходимо поддерживать безопасность SAML на основе ADFS на основе Azure для страниц пользовательского интерфейса и безопасность на основе Oauth2 для моих REST API в одном приложении с весенней загрузкой
У меня есть приложение с загрузочной пружиной, которое пытается обеспечить защиту на основе SAML для некоторых из моих ресурсов пользовательского интерфейса и защиту на основе Oauth2 для моих REST API. Страницы пользовательского интерфейса и API-интерфейсы REST размещаются в одном приложении с весенней загрузкой. У меня есть класс SecurityConfiguration, который расширяет WebSecurityConfigurerAdapter и который содержит мою конфигурацию SAML. У меня также есть класс ResourceServerConfig, который расширяет ResourceServerConfigurerAdapter, где я пытался настроить аутентификацию Oauth2 для моих REST API.
Вот как выглядит мой код
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true)
public class SecurityConfiguration extends WebSecurityConfigurerAdapter
{
/////// Other methods //////
@Override
protected void configure(HttpSecurity http) throws Exception
{
http.authorizeRequests().anyRequest().authenticated();
http.httpBasic().authenticationEntryPoint(samlEntryPoint());
http.csrf().disable();
http.addFilterBefore(metadataGeneratorFilter(), ChannelProcessingFilter.class).addFilterAfter(samlFilter(), BasicAuthenticationFilter.class);
http.authorizeRequests().antMatchers("/oauth/token").permitAll().anyRequest().authenticated();
}
Класс ResourceServerConfig выглядит примерно так:
@Configuration
@EnableResourceServer
public class ResourceServerConfig extends ResourceServerConfigurerAdapter
{
@Override
public void configure(HttpSecurity http) throws Exception
{
http
.csrf().disable()
.anonymous().and()
.authorizeRequests()
.antMatchers(HttpMethod.OPTIONS).permitAll()
.antMatchers("/api/**").authenticated();
}
Моя проблема в том, что при наличии вышеуказанной конфигурации я могу либо получить защиту SAML на своих страницах пользовательского интерфейса, либо защиту Oauth2 на своих API, но не на обоих. Если я удалю @EnableResourceServer из класса ResourceServerConfig и попытаюсь получить доступ к одной из моих страниц пользовательского интерфейса, я надежно перенаправлюсь на страницу входа в Microsoft Azure, которая после успешной аутентификации перенаправляет меня обратно на мою страницу пользовательского интерфейса. Но при этом любая попытка доступа к моему apis (с действительными токенами на предъявителя) приводит к перенаправлению на страницу входа в Microsoft Azure. Если я снова включаю @EnableResourceServer, мои API-интерфейсы будут защищены и будут работать так, как ожидается, но защита SAML для всех страниц пользовательского интерфейса будет полностью отключена с помощью Spring, что обеспечит беспрепятственный доступ ко всем ресурсам пользовательского интерфейса.
Я не могу понять, как сказать Spring Boot использовать какую-либо инфраструктуру аутентификации для двух типов шаблонов URL, которые у меня есть. Возможна ли такая вещь?
Любая помощь с этим будет оценена.
С уважением,
Дипак Джа