41.3 Authentication Services認證服務
在Spring Security 3.0之前,身份驗證管理器AuthenticationManager
是在內部自動註冊的。現在,您必須使用<authentication-manager>元素顯式註冊一個。這將建立Spring Security的ProviderManager類的一個例項,它需要用一個或多個AuthenticationProvider例項的列表進行配置。這些可以使用名稱空間提供的語法元素建立,也可以是標準bean定義,使用身份驗證提供程式元素標記為新增到列表中。
41.3.1<authentication-manager>
每個使用名稱空間的Spring Security應用程式都必須在某個地方包含這個元素。它負責註冊身份驗證管理器,該管理器為應用程式提供身份驗證服務。建立身份驗證提供程式例項的所有元素都應該是該元素的子元素。
<authentication-manager> Attributes
- alias此屬性允許您為內部例項定義別名,以便在您自己的配置中使用。其用途在美國空間介紹中有所描述。
- erase-credentials如果設定為true,一旦使用者通過身份驗證,身份驗證管理器將嘗試清除返回的身份驗證物件中的任何憑據資料。實際上,它對映到提供程式管理器的erasecretedentialsafteratrantination屬性。這將在核心服務一章中討論。
- id此屬性允許您為內部例項定義一個id,以便在您自己的配置中使用。它與別名元素相同,但是提供了與使用id屬性的元素更加一致的體驗。
Child Elements of <authentication-manager>
41.3.2<authentication-provider>
除非與ref屬性一起使用,否則此元素是配置DaoAuthenticationProvider的簡寫。DaoAuthenticationProvider從使用者詳細資訊服務UserDetailsService
載入使用者資訊,並將使用者名稱/密碼組合與登入時提供的值進行比較。可以通過使用可用的名稱空間元素(jdbc-user-service)或者通過使用user-service-ref屬性指向應用程式上下文中其他地方定義的bean來定義UserDetailsService例項。您可以在名稱空間介紹中找到這些變體的例子。
<authentication-provider> Attributes
- ref定義對實現身份驗證提供程式AuthenticationProvider的Spring bean的引用。
如果您已經編寫了自己的身份驗證提供程式實現(或者出於某種原因想要將Spring Security自己的一個實現配置為傳統bean),那麼您可以使用以下語法將其新增到提供程式管理器的內部列表中:
1 <security:authentication-manager> 2 <security:authentication-provider ref="myAuthenticationProvider" /> 3 </security:authentication-manager> 4 <bean id="myAuthenticationProvider" class="com.something.MyAuthenticationProvider"/>
- user-service-ref對實現使用者詳細資訊服務UserDetailsService的bean的引用,可以使用標準bean元素或自定義使用者服務元素來建立。
Child Elements of <authentication-provider>
41.3.3<jdbc-user-service>
導致建立基於JDBC的使用者詳細資訊服務。
<jdbc-user-service> Attributes
- authorities-by-username-query:一個查詢給定使用者名稱的使用者授權的SQL語句。
1 select username, authority from authorities where username = ?
- cache-ref定義對快取的引用,供使用者詳細資訊服務使用。
- data-source-ref提供所需表的資料來源的bean標識。
-
group-authorities-by-username-query一個查詢給定使用者名稱的使用者組許可權的SQL語句。預設值為
-
1 select 2 g.id, g.group_name, ga.authority 3 from 4 groups g, group_members gm, group_authorities ga 5 where 6 gm.username = ? and g.id = ga.group_id and g.id = gm.group_id
- id一個bean識別符號,用於引用上下文中其他地方的bean。
- role-prefix一個非空字串字首,將被新增到從永久儲存中載入的角色字串中(預設為“ROLE_”)。在預設值為非空的情況下,使用值“無”表示沒有字首。
-
users-by-username-query一個查詢使用者名稱、密碼和給定使用者名稱的啟用狀態的SQL語句。預設值為
-
1 select username, password, enabled from users where username = ?
41.3.4<password-encoder>
身份驗證提供程式可以選擇配置為使用密碼編碼器,如名稱空間介紹中所述。這將導致向該bean注入適當的PasswordEncoder例項,可能還附帶一個SaltSource bean來提供用於雜湊的鹽值。
Parent Elements of <password-encoder>
<password-encoder> Attributes
- base64字串是否應該進行base64編碼
- hash定義用於使用者密碼的雜湊演算法。我們強烈建議不要使用MD4,因為它是一個非常弱的雜湊演算法。
- ref定義對實現PasswordEncoder的Spring bean的引用。
Child Elements of <password-encoder>
41.3.5<salt-source>
密碼加鹽策略。可以使用系統範圍的常數或使用者詳細資訊物件的屬性。
<salt-source> Attributes
- ref定義對Spring bean標識的引用。
- system-wide將用作密碼編碼器的鹽的單個值。
- user-property使用者詳細資訊UserDetails物件的一個屬性,將被密碼編碼器用作鹽。通常會用到類似“username”的東西。
41.3.6<user-service>
從屬性檔案或“使用者”子元素列表建立記憶體中的使用者詳細資訊服務。使用者名稱在內部轉換為小寫,以允許不區分大小寫的查詢,因此如果需要區分大小寫,就不應該使用這種方式。
<user-service> Attributes
- id一個bean識別符號,用於引用上下文中其他地方的bean。
-
properties屬性檔案的位置,每行的格式為 使用者名稱=密碼,授予許可權[,授予許可權][,啟用|禁用] <使用者服務>的子元素username=password,grantedAuthority[,grantedAuthority][,enabled|disabled]
Child Elements of <user-service>
41.3.7<user>
表示應用程式中的使用者。
<user> Attributes
- authorities授予使用者的多個許可權之一。用逗號(但沒有空格)分隔許可權。例如,“ROLE_USER,ROLE_ADMINISTRATOR”
- disabled可以設定為“真”,將帳戶標記為禁用和不可用。
- locked可以設定為“真”,將帳戶標記為鎖定和不可用。
- name分配給使用者的使用者名稱。
- password分配給使用者的密碼。如果相應的身份驗證提供程式支援雜湊,則可以對其進行雜湊處理(請記住設定“使用者服務”元素的“雜湊”屬性)。如果資料不用於身份驗證,而僅用於訪問許可權,則可以省略該屬性。如果省略,名稱空間將生成一個隨機值,防止其被意外用於身份驗證。不能為空。