SAML и Oauth2 в одном приложении для весенней загрузки - PullRequest
0 голосов
/ 17 января 2019

В попытке разработать общую службу идентификации для проекта, над которым я работаю, мне необходимо поддерживать безопасность 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, которые у меня есть. Возможна ли такая вещь?

Любая помощь с этим будет оценена.

С уважением,

Дипак Джа

1 Ответ

0 голосов
/ 18 января 2019

Я думаю, что нашел ответ на свой вопрос. Этот ответ здесь предоставляет работоспособное решение. Правильно настроенный OAuthRequestedMatcher, кажется, делает свое дело. Пожалуйста, дайте мне знать, если кто-то думает, что это можно сделать лучше.

Привет

Дипак Джа

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...