Внешний SSO с пружинной защитой - PullRequest
0 голосов
/ 21 мая 2019

Я работаю над приложением, которое требует интеграции проприетарного SSO с Spring Security. Приложение использует весеннюю загрузку, и требование состоит в том, чтобы мы использовали аутентификацию из внутреннего проприетарного модуля SSO и авторизацию из существующего приложения. Система аутентификации существующего приложения должна быть заменена внутренним фирменным модулем аутентификации SSO. Я просмотрел несколько документов и понял, что это возможно, поскольку пружина основана на модуле.

Во время работы над приложением я заметил, что мы используем FilterRegistrationBean для инициализации одного фильтра, а другой фильтр добавляется в цепочку с помощью метода configure (HttpSecurity http) WebSecurityConfigurerAdapter.

Может кто-нибудь, пожалуйста, дайте мне знать, если это будет рассматриваться как две разные цепочки? Если да, то как проверяются цепи на предмет фильтрации деталей?

Могу ли я просто удалить фильтр, который мы добавляем с помощью метода configure (HttpSecurity http) WebSecurityConfigurerAdapter, и заменить существующий фильтр, который зарегистрирован через FilterRegistrationBean, фильтром (с наивысшим приоритетом) из внутреннего проприетарного SSO?

1 Ответ

0 голосов
/ 21 мая 2019

ОК, поэтому мы делаем именно то, что вы просите в одной из наших систем. Это работает в Spring boot 1 и 2. Вот шаги, которые нужно предпринять.

Создать расширение компонента AbstractPreAuthenticatedProcessingFilter. Реализуйте getPreAuthenticatedPrincipal и getPreAuthenticatedCredentials, чтобы извлечь аутентифицированного пользователя и дополнительные учетные данные (например, сертификат) из вашей системы единого входа. Создайте FilterRegistrationBean для этого bean-компонента фильтра, иначе благодаря сканированию компонентов весенней загрузки он попадет в основную цепочку фильтров, а также в цепочку фильтров безопасности.

Создание компонента службы данных (авторизации) пользователя, реализующего AuthenticationUserDetailsService<PreAuthenticatedAuthenticationToken>. Переопределите loadUserDetails, чтобы получить свой аутентифицированный токен и использовать его для добавления разрешений в виде GrantedAuthority списков.

В вашем подклассе WebSecurityConfigurerAdapter bean выполните следующее:

  1. Введите ваш подкласс AbstractPreAuthenticatedProcessingFilter, а также ваш подкласс AuthenticationUserDetailsService.

  2. Добавьте члена класса типа PreAuthenticatedAuthenticationProvider и инициализируйте его с помощью new (это не bean-компонент).

  3. В configure(HttpSecurity) инициализируйте ваш bean-компонент фильтра с помощью менеджера аутентификации: yourBean.setAuthenticationManager(authenticationManager()), затем убедитесь, что ваш фильтр включен:

http.addFilter(yourBean)
  .authorizeRequests()
    .requestMatchers(...)
  1. Переопределите configure(AuthenticationManagerBuilder) и инициализируйте PreAuthenticatedAuthenticationProvider, созданный на шаге (2), для реализации компонентов проверки подлинности и авторизации.
    this.preAuthProvider.setPreAuthenticatedUserDetailsService(this.userDetailsService);
    this.preAuthProvider.setThrowExceptionWhenTokenRejected(true);

    authBuilder.authenticationProvider(this.preAuthProvider);

Это должно быть все. Надеюсь, это поможет.

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