Проверка подлинности Spring Security и пользовательские интерфейсы - PullRequest
1 голос
/ 14 июля 2020

Согласно Spring Security, провайдер аутентификации используется, если аутентификация выполняется внешним провайдером аутентификации. После аутентификации Spring Security получит объект аутентификации, который инкапсулирует информацию о пользователе.

Если фреймворк Spring Security аутентифицируется, информация о пользователе инкапсулируется в экземпляр пользовательского интерфейса (например, класс UserDetails, который является реализацией по умолчанию) .

У меня вопрос - почему среда Spring Security не может использовать последовательный подход? Почему они не могли использовать UserDetails вместо объекта Authentication во всех случаях? Есть ли этому причина?

1 Ответ

1 голос
/ 14 июля 2020

Согласно документации Spring

public interface Authentication extends Principal, Serializable

Представляет токен для запроса аутентификации или для аутентифицированного участника после того, как запрос был обработан методом AuthenticationManager.authenticate (Authentication). После того, как запрос был аутентифицирован, аутентификация обычно сохраняется в локальном для потока SecurityContext, управляемом SecurityContextHolder с помощью используемого механизма аутентификации. Явная аутентификация может быть достигнута без использования одного из механизмов аутентификации Spring Security, путем создания экземпляра аутентификации и использования кода:

 SecurityContextHolder.getContext().setAuthentication(anAuthentication);

Подробнее см. https://docs.spring.io/spring-security/site/docs/4.2.15.RELEASE/apidocs/org/springframework/security/core/Authentication.html

Объяснение:

Объект аутентификации будет установлен в локальный контекст безопасности только в том случае, если пользователь аутентифицирован с действительными учетными данными. И действует как жетон. Где, как в случае с UserDetails, мы не можем узнать, аутентифицирован ли пользователь.

Вы также можете рассматривать его как принцип единой ответственности, где ответственность класса UserDetails заключается в управлении данными пользователя, ответственность за аутентификацию для обработки подлинности.

...