
第四種,如上示意圖所示,使用SAML協(xié)議來對用戶請求進(jìn)行操作鑒權(quán)。它是一個基于XML的標(biāo)準(zhǔn),用于在不同的安全域(security domain)之間交換認(rèn)證和授權(quán)數(shù)據(jù)。在SAML標(biāo)準(zhǔn)定義了身份提供者(identity provider)和服務(wù)提供者(service provider),這兩者構(gòu)成了前面所說的不同的安全域。
以上圖Google提供的Apps SSO的機制,簡單介紹下SAML鑒權(quán)的交互方式:
用戶請求訪問自建的google application
當(dāng)前application 生成一個 SAML 身份驗證請求。SAML 請求將進(jìn)行編碼并嵌入到SSO 服務(wù)的網(wǎng)址中。
當(dāng)前application將重定向發(fā)送到用戶的瀏覽器。重定向網(wǎng)址包含應(yīng)向SSO 服務(wù)提交的編碼 SAML 身份驗證請求。
SSO(統(tǒng)一認(rèn)證中心或叫Identity Provider)解碼 SAML 請求,并提取當(dāng)前application的 ACS(聲明客戶服務(wù))網(wǎng)址以及用戶的目標(biāo)網(wǎng)址(RelayState 參數(shù))。然后,統(tǒng)一認(rèn)證中心對用戶進(jìn)行身份驗證。
統(tǒng)一認(rèn)證中心生成一個 SAML 響應(yīng),其中包含經(jīng)過驗證的用戶的用戶名。按照 SAML 2.0 規(guī)范,此響應(yīng)將使用統(tǒng)一認(rèn)證中心的 DSA/RSA 公鑰和私鑰進(jìn)行數(shù)字簽名。
統(tǒng)一認(rèn)證中心對 SAML 響應(yīng)和 RelayState 參數(shù)進(jìn)行編碼,并將該信息返回到用戶的瀏覽器。統(tǒng)一認(rèn)證中心提供了一種機制,以便瀏覽器可以將該信息轉(zhuǎn)發(fā)到當(dāng)前application ACS。
當(dāng)前application使用統(tǒng)一認(rèn)證中心的公鑰驗證 SAML 響應(yīng)。如果成功驗證該響應(yīng),ACS 則會將用戶重定向到目標(biāo)網(wǎng)址。
用戶將重定向到目標(biāo)網(wǎng)址并登錄到當(dāng)前application。
目前SAML在業(yè)界也有相當(dāng)?shù)氖褂枚?,包括IBM Weblogic等產(chǎn)品。
第四種方案的特點有:
由Identity Provider提供可信的簽名聲明
服務(wù)的訪問安全由可信的Identity Provider提供
小結(jié)下使用第四種方案的好處:標(biāo)準(zhǔn)的可信訪問模型
同時,小結(jié)下使用這種方案需要注意的地方:
基于XML協(xié)議,傳輸相對復(fù)雜
對非瀏覽器客戶端適配不方便
四、Spring Cloud Security解決方案
Spring Cloud Security特點有:
基于OAuth2 和OpenID協(xié)議的可配置的SSO登錄機制
基于tokens保障資源訪問安全
引入UAA鑒權(quán)服務(wù),UAA是一個Web服務(wù),用于管理賬戶、Oauth2客戶端和用戶用于鑒權(quán)的問題令牌(Issue Token)。UAA實現(xiàn)了Oauth2授權(quán)框架和基于JWT(JSON web tokens)的問題令牌。

下面簡單介紹下UAA,事實上,它是由CloudFoundry發(fā)起的,也是CloudFoundry平臺的身份管理服務(wù)( https://docs.cloudfoundry.org/ ... .html )。
主要功能是基于OAuth2,當(dāng)用戶訪問客戶端應(yīng)用時,生成并發(fā)放token給目標(biāo)客戶端。
UAA認(rèn)證服務(wù)包含如下幾個方面的內(nèi)容:
認(rèn)證對象。如用戶、客戶端以及目標(biāo)資源服務(wù)器
認(rèn)證類型。主要有授權(quán)碼模式、密碼模式以及客戶端模式
認(rèn)證范圍,即認(rèn)證權(quán)限,并作為一個命名的參數(shù)附加到AccessToken上。
接下來,結(jié)合實例,一起來看下UAA在Spring Cloud中的實踐。

如圖所示,這是一個簡單的基于Spring Cloud微服務(wù)架構(gòu)的例子,它的主要組件有:
Eureka組件提供服務(wù)發(fā)現(xiàn)功能
獨立的Config組件提供類似配置中心的服務(wù),持久化層可以是文件系統(tǒng),也可是git repository
Auth組件提供基于UAA的鑒權(quán)服務(wù)
Account組件保存用戶的業(yè)務(wù)信息
其他組件不一一介紹了
這里主要講Auth組件和Account組件是如何基于UAA服務(wù)進(jìn)行認(rèn)證和授權(quán)。

圖一為Auth組件業(yè)務(wù)代碼中定義了不同客戶端的認(rèn)證類型和認(rèn)證范圍,其中:
瀏覽器端的認(rèn)證類型是password,認(rèn)證范圍是ui
account組件端的認(rèn)證類型是client_credentials,認(rèn)證范圍是server
圖二為config組件(配置中心)定義的請求路由的規(guī)則,其中: