Учетные данные Spring SAML и учетные записи платформы

Мне удалось интегрировать Spring Boot и Spring Security SAML с помощью аннотации @ImportResource.

Теперь я хотел бы продолжить следующим образом:

  1. пользователь выбирает IdP [ГОТОВО].
  2. он выполняет вход в систему (успешный) [DONE].
  3. SP получает пользовательские данные (путем анализа объекта SAMLCreditential) [DONE].
  4. веб-приложение должно было проверить, существует ли идентификатор пользователя (например, электронная почта), полученный через SAML, в моей собственной БД.
  5. а) Если да, веб-приложение считывает из БД роль и устанавливает соответствующие привилегии.
    б) Если нет, веб-приложение должно выполнить перенаправление на страницу регистрации, чтобы вставить пользователя в систему.

Имеет ли смысл выполнять пункты 4 и 5, используя реализацию UserDetailsService, или мне нужно настроить контекст безопасности, определяющий поставщиков проверки подлинности, фильтры и т. д.?


person vdenotaris    schedule 28.04.2014    source источник


Ответы (1)


Вам следует реализовать org.springframework.security.saml.userdetails.SAMLUserDetailsService и подключить его к bean-компоненту samlAuthenticationProvider. Если пользователь не существует, вы должны создать исключение UsernameNotFoundException, в противном случае просто заполните и верните данные из своей БД.

Кроме того, вы должны реализовать свой собственный org.springframework.security.web.authentication.AuthenticationFailureHandler и подключить его к bean-компоненту samlWebSSOProcessingFilter. Эта реализация будет вызываться с отправкой UsernameNotFoundException в качестве параметра, и затем вы сможете перенаправить пользователя на правильную страницу регистрации в качестве реакции на нее.

person Vladimír Schäfer    schedule 28.04.2014
comment
Пожалуйста, В. Если вы удовлетворены ответом, примите его, нажав на галочку рядом с ответом, чтобы переключить его с пустого на зеленый. - person Vladimír Schäfer; 28.04.2014
comment
Есть ли способ передать nameID (из объекта SAMLCredential) обработчику сбоев, чтобы установить атрибут модели страницы перенаправления? - person vdenotaris; 28.04.2014
comment
UsernameNotFoundException имеет конструктор с полем extraInformation. Просто поместите его туда и загрузите из исключения один раз в свой failureHandler. - person Vladimír Schäfer; 28.04.2014
comment
Хорошо, это работает, но я вижу, что этот конструктор устарел. Знаете ли вы, есть ли правильный способ выполнить этот проход в соответствии с лучшими практиками Spring? - person vdenotaris; 28.04.2014
comment
Как сказано в документации по исключению: используйте сообщение об исключении или используйте пользовательское исключение, если вам действительно нужна дополнительная информация, другими словами, вы можете расширить UsernameNotFoundException своим собственным, что позволит вам сохранить NameID и вместо этого выбросить его. - person Vladimír Schäfer; 28.04.2014