微服務(wù)常用訪問安全設(shè)計方案——API Tokens
第三種曼库,如上示意圖所示,使用Token Based協(xié)議來對用戶請求進(jìn)行操作鑒權(quán)葵腹。
簡單介紹下最基本的Token Based的交互方式:
簡單介紹下最基本的Token Based的交互方式:
用戶使用包含用戶名和密碼的credential從客戶端發(fā)起資源請求
后端接受請求饮潦,通過授權(quán)中心,生產(chǎn)有效token字符串伯顶,返回給客戶端
客戶端獲得token后,再次發(fā)出資源請求
后端接受帶token的請求骆膝,通過授權(quán)中心祭衩,獲取相關(guān)資源,返回給客戶端
以上圖Google提供的Apps SSO的機(jī)制阅签,簡單介紹下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)證中心提供了一種機(jī)制,以便瀏覽器可以將該信息轉(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矫夷。
Spring Cloud Security解決方案
Spring Cloud Security特點有:
基于OAuth2 和OpenID協(xié)議的可配置的SSO登錄機(jī)制
基于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...)赤嚼。
主要功能是基于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)拉背。
clientID和clientSecret
accessTokenUrl师崎,這里指定了auth組件的uaa獲取token的url
grant-type,即認(rèn)證類型椅棺,這里指定為client_credentials
scope犁罩,這里指定了server,說明是這個認(rèn)證請求只適用在各微服務(wù)之間的訪問土陪。