# DAoAuthenticationProvider

[DaoAuthenticationProvider](https://DOCS. Spring.io/ Spring-security/site/DOCS/5.6.2/api/org/springframework/security/authentication/dao/daoauthenticationprovider.html)是一种[AuthenticationProvider](../architecture.html.html.html# Servlet-attentification-authnationprovider)实现,利用[<UserDetailsService](user-details-service.html# Servlet-html#[userauthentification]-html# Servlet-

让我们来看看DaoAuthenticationProvider在 Spring 安全性中是如何工作的。该图详细说明了读取用户名和密码图中的[AuthenticationManager](../architecture.html# Servlet-authentication-authenticationmanager)是如何工作的。

DAoAuthenticationProvider

图 1。DaoAuthenticationProvider用法

number 1来自读取用户名和密码的身份验证Filter将一个UsernamePasswordAuthenticationToken传递到AuthenticationManager,这是由[ProviderManager](../architecture.html# Servlet-assertification-providerManager)实现的。

number 2ProviderManager被配置为使用身份验证提供者类型的DaoAuthenticationProvider

number 3DaoAuthenticationProviderUserDetailsService中查找UserDetails

number 4DaoAuthenticationProvider然后使用[PasswordEncoder](password-encoder.html# Servlet-authentication-password-storage)在上一步返回的UserDetails上验证密码。

number 5当身份验证成功时,返回的[Authentication](../architecture.html# Servlet-Authentication-Authentication)类型为UsernamePasswordAuthenticationToken,并且具有一个主体,即配置的UserDetailsService返回的UserDetails。最终,返回的UsernamePasswordAuthenticationToken将由身份验证Filter设置在[SecurityContextHolder](../architecture.html# Servlet-authentication-securitycontextholder)上。

PasswordEncoder LDAP