1. 程式人生 > 實用技巧 >41.3 Authentication Services認證服務

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分配給使用者的密碼。如果相應的身份驗證提供程式支援雜湊,則可以對其進行雜湊處理(請記住設定“使用者服務”元素的“雜湊”屬性)。如果資料不用於身份驗證,而僅用於訪問許可權,則可以省略該屬性。如果省略,名稱空間將生成一個隨機值,防止其被意外用於身份驗證。不能為空。