最近中文字幕高清中文字幕无,亚洲欧美高清一区二区三区,一本色道无码道dvd在线观看 ,一个人看的www免费高清中文字幕

Spring Security OpenID 認證集成

1. 前言

在前面的小節(jié)我們介紹了多種認證解決方案,本節(jié)介紹的是一種互聯(lián)網(wǎng)身份共享方案:「OpenID」。

OpenID 從其名稱可看成,是一種開放的身份認證標準。

OpenID 的使用廣泛,Google,WordPress,Yahoo 和 PayPal 等知名公司或組織都是用 OpenID 做用戶身份驗證標準。

Spring Security 提供了集成 OpenID 認證的方法,本節(jié)我們將重點討論如何通過 Spring Security 實現(xiàn) OpenID 認證集成。

2. OpenID 基本原理

OpenID 是一種去中心化的互聯(lián)網(wǎng)身份認證解決方案。對于使用 OpenID 的網(wǎng)站,用戶可以不需要為該網(wǎng)站設置用戶名密碼,而是使用預先注冊好的 OpenID 身份。

簡單來說,OpenID 是一張可以在各個網(wǎng)站使用的通行證,它實現(xiàn)的目標是注冊一次身份,同時可在多個平臺使用。

OpenID 的身份標識是以 URI 形式體現(xiàn),每當我們訪問一個支持 OpenID 認證的網(wǎng)站時,該網(wǎng)站會自動將網(wǎng)頁跳轉到 OpenID 認證地址,使用 URI 作為用戶名,并由用戶提供密碼,完成身份認證后,用戶訪問的目標網(wǎng)站便接受了用戶的身份。

圖片描述

更多 OpenID 介紹可訪問的官方文檔

3. Spring Security 實現(xiàn)方法

3.1 認證集成

在 Spring Security 中,使用 Open ID 作為認證標準的方式非常簡單。Spring Security 提供了集成 Open ID 認證的標簽組件,開發(fā)者只需要在表單登錄的頁面中加入 <openid-logn> 標簽即可,完整代碼如下:

<http>
<intercept-url pattern="/**" access="ROLE_USER" />
<openid-login />
</http>

當然,我們首先需要配置好 Open ID 的認證組件(例如:myopenid.com),并且增加用于認證的用戶信息,如:

<user name="https://jimi.hendrix.myopenid.com/" authorities="ROLE_USER" />

配置好后,你就可以使用 myopenid.com 網(wǎng)站作為認證服務。

除此之外,我們還可以指定 UserDetailsService 對象,用于配置 OpenID 的 user-service-ref 屬性。注意,此處我們雖然也給用戶對象設置了密碼屬性,但是該用戶對象中,我們僅僅是用來獲取權限的,其密碼在此處并不生效。但我們依然要保障密碼的復雜程度,以保障認證服務的安全。

3.2 屬性交換

Spring Security 支持 Open ID 的屬性交換功能。例如,通過以下配置,我們可以獲取到 Open ID 用戶的郵箱和昵稱屬性:

<openid-login>
<attribute-exchange>
    <openid-attribute name="email" type="https://axschema.org/contact/email" required="true"/>
    <openid-attribute name="name" type="https://axschema.org/namePerson"/>
</attribute-exchange>
</openid-login>

本例中,每一個 Open ID 的屬性類型值都是 URI 形式,定義在 https://axschema.org/ 中。required 屬性代表該屬性必須從認證中心返回,而屬性的名稱及定義規(guī)范則要和認證服務的定義保持一致。從認證中心返回的屬性可以通過以下形式得到:

OpenIDAuthenticationToken token =
    (OpenIDAuthenticationToken)SecurityContextHolder.getContext().getAuthentication();
List<OpenIDAttribute> attributes = token.getAttributes();

OpenIDAuthenticationToken 對象從 SecurityContextHolder 對象中獲取。Google,Yahoo 和 MyOpenID 所提供的屬性對象不盡相同。

4. 小結

本小節(jié)主要知識點有:

  • OpenID 是一個廣泛應用于互聯(lián)網(wǎng)網(wǎng)站的認證方式;
  • OpenID 的作用是提供身份識別的能力;
  • OpenID 被一些國際的主流網(wǎng)站支持,比如 Google,Yahoo 和 MyOpenID 等,在國內尚未出現(xiàn)較權威的提供方;
  • Spring Security 提供了網(wǎng)站 OpenID 認證集成的功能。

到此我們對一些被廣泛應用的認證授權方案進行了介紹,包括 OAuth2.0、SAML2.0、CAS、JAAS 和 OpenID。下節(jié)我們討論一個可以提升用戶體驗的操作:「記住我」功能的實現(xiàn)。