第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

Spring Security OpenID 認(rèn)證集成

1. 前言

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

OpenID 從其名稱可看成,是一種開(kāi)放的身份認(rèn)證標(biāo)準(zhǔn)。

OpenID 的使用廣泛,Google,WordPress,Yahoo 和 PayPal 等知名公司或組織都是用 OpenID 做用戶身份驗(yàn)證標(biāo)準(zhǔn)。

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

2. OpenID 基本原理

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

簡(jiǎn)單來(lái)說(shuō),OpenID 是一張可以在各個(gè)網(wǎng)站使用的通行證,它實(shí)現(xiàn)的目標(biāo)是注冊(cè)一次身份,同時(shí)可在多個(gè)平臺(tái)使用。

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

圖片描述

更多 OpenID 介紹可訪問(wèn)的官方文檔。

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

3.1 認(rèn)證集成

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

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

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

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

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

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

3.2 屬性交換

Spring Security 支持 Open ID 的屬性交換功能。例如,通過(guò)以下配置,我們可以獲取到 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>

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

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

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

4. 小結(jié)

本小節(jié)主要知識(shí)點(diǎn)有:

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

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