Вот как Spring Spring работает на высоком уровне.
Пользователь пытается аутентифицироваться через некоторый тип пользовательского интерфейса (например, часть CAS). Пользовательский интерфейс будет передавать имя пользователя / пароль в Spring. Spring в конце концов вызовет UserDetailService.loadUserByUsername
и передаст ему имя пользователя, а если пользователь существует, UserDetailService
вернет ненулевое UserDetails
. В случае нулевого UserDetails
или ненулевого с другим паролем Spring не пройдет аутентификацию.
CAS - это просто сервер аутентификации, он оставляет открытым способ хранения пользователя. Вы можете использовать LDAP или базу данных. Этот выбор основан на другой реализации UserDetailService
. Посмотрите на javadoc еще раз. Он содержит список реализаций по умолчанию, которые вы можете использовать.
См. Часть 5 вашего связанного урока. Он показывает, как вы можете изменить и CAS, и приложение Spring Boot, чтобы использовать базу данных в качестве хранилища пользователя. Ключевым моментом здесь является то, что для того, чтобы серверная часть работала с CAS-сервером против пользователей, хранящихся в базе данных, обе должны быть соответствующим образом настроены для поиска пользователя по базе данных. CAS настраивается через application.properties
, а Spring загружается через UserDetailService
.
Теперь к вашим вопросам в комментарии:
почему клиент должен беспокоиться о том, как сервер хранит пользователей?
Клиент не должен беспокоиться о UserDetailService
. Он используется только серверной службой, которая защищена CAS.
Просто чтобы быть уверенным, что я все понял: если мне просто нужно знать, это
пользователь подключен? тогда CAS достаточно, и я никогда не буду использовать
UserDetailService. Но если мне нужна информация о пользователе
(имя, телефон и т. д.), затем я вызываю UserDetailService, чтобы загрузить его
(из db, ldap или чего-либо еще).
Да и нет. Вам не нужно хранить пароль в UserDetails
, но вы должны иметь возможность вернуть UserDetails
для успешного аутентифицированного пользователя CAS. Смотрите эту часть из вашего связанного урока:
Обратите внимание, что участник базы данных, который использует сервер
должно быть таким же, как у клиентских приложений.