Spring Security: существуют ли пользовательские данные и UserDetailsService в каждом типе приложений, использующих Spring Security?

#spring #spring-security

#spring #spring-security

Вопрос:

У меня вопрос к Spring Security 3.0.5.

При использовании Spring Security для защиты веб-приложения, всегда ли существует объект «UserDetails»? Я имею в виду, предоставляет ли каждый тип приложений (даже в других системах, таких как LDAP или X.509 или CAS), использующих Spring Security, также объект «UserDetails»?

Кроме того, если да, то есть ли у каждого приложения UserDetailsService?

Ну, читая документацию Spring Security, я так не думаю, но я читал, что основные компоненты всегда существуют (SecurityContextHolder, SecurityContext, Аутентификация). Если да, то какой смысл имеет объект аутентификации, если он не содержит UserDetails-Object?

Спасибо!

Ответ №1:

Короткий ответ — нет. Различные типы механизмов аутентификации могут использовать разные типы аутентификаций.

Однако многие механизмы используют UsernamePasswordAuthenticationToken, который имеет ссылку на объект UserDetails. Например: UsernamePasswordAuthenticationFilter DaoAuthenticationProvider. Также UsernamePasswordFilter LdapAuthenticationProvider.

Но: только DaoAuthenticationProviders используют UserDetailsService.

На практике, если вы запрашиваете у пользователя имя пользователя / пароль с помощью веб-формы, вы, вероятно, в конечном итоге используете UsernamePasswordAuthenticationToken и, следовательно, UserDetails. Но вы будете использовать UserDetailsService только в том случае, если используете DaoAuthenticationProvider.

Комментарии:

1. Спасибо! но как насчет SecurityContextHolder, SecurityContext и аутентификации? Эти объекты всегда должны использоваться, не так ли?

2. SecurityContext имеет ссылку на аутентификацию, которая является просто интерфейсом. UsernamePasswordAuthenticatonToken, который имеет ссылку на пользовательские данные, является типом аутентификации, но возможны и другие типы (см. Javadoc для аутентификации).

3. Спасибо. Я знаю, что возможны другие типы аутентификации. Я просто хотел знать, есть ли у каждого приложения, защищенного spring security, SecurityContextHolder, SecurityContext и Authentication-Objects (какой бы токен это ни был, для меня не имеет значения, все они представляют принципала, не так ли?). Эти три объекта описаны как «основные» компоненты, вот почему я хотел бы это знать! 🙂

4. Да, они всегда присутствуют, но пользовательские данные / UserDetailsService — нет.