潘 焱
(上海市數(shù)字證書認(rèn)證中心有限公司 上海 200040)
由于云計(jì)算中的用戶認(rèn)證與權(quán)限管理與傳統(tǒng)網(wǎng)站的認(rèn)證方式相比要復(fù)雜的多,因此服務(wù)、平臺(tái)、基礎(chǔ)設(shè)施之間的認(rèn)證授權(quán)也逐步成為制約云發(fā)展的安全需求。2011年5月發(fā)布的OAuth 2.0的草案,較好的解決了云時(shí)代用戶認(rèn)證與授權(quán)的問(wèn)題,雖然推出時(shí)間不長(zhǎng),但已成為行業(yè)內(nèi)應(yīng)用最廣泛的標(biāo)準(zhǔn)之一。OAuth 2.0是在OpendID的基礎(chǔ)上提出的。OpenID就是將用戶的密碼安全的存儲(chǔ)在一個(gè)OpenID 服務(wù)網(wǎng)站上,其它網(wǎng)站都可通過(guò)OpenID來(lái)驗(yàn)證用戶身份。OpenID的提出,在很大程度上解決了用戶在每個(gè)網(wǎng)站都需要注冊(cè)用戶名和密碼的問(wèn)題,IDP(身份提供者 Identity Provider)是解決這一問(wèn)題的關(guān)鍵角色。隨著云時(shí)代的到來(lái),僅僅解決用戶認(rèn)證已經(jīng)不能滿足應(yīng)用的需求了,OAuth協(xié)議就是適應(yīng)這一需求而推出的。OAuth規(guī)范側(cè)重解決用戶的授權(quán)問(wèn)題,包括四種授權(quán)類型。本文針對(duì)其中應(yīng)用比較廣泛的Authorization Code模式提出了基于數(shù)字證書的IDP改進(jìn)模型。
OAuth2.0規(guī)定了四種授權(quán)模式,比較常用的是認(rèn)證碼授權(quán)模式認(rèn)證(authorization code grant type)。這種模式的核心是通過(guò)認(rèn)證碼與重定向URI的配合,使客戶端可以獲得訪問(wèn)令牌(access tokens),從而使得客戶端可獲得授權(quán)訪問(wèn)資源,其基本步驟如下:
(1)客戶端通過(guò)將終端用戶的用戶代理軟件(一般為瀏覽器)引導(dǎo)到認(rèn)證授權(quán)服務(wù)器發(fā)起這個(gè)流程。客戶端將標(biāo)識(shí)符(client identifier)、請(qǐng)求作用域(requested scope)、本地狀態(tài)(local state),和一個(gè)重定向URI(在訪問(wèn)被許可或被拒絕后授權(quán)服務(wù)器會(huì)重新將用戶代理軟件引導(dǎo)回這個(gè)URI)等信息發(fā)給認(rèn)證服務(wù)器。
(2)授權(quán)服務(wù)器通過(guò)瀏覽器驗(yàn)證終端用戶身份,并確定用戶是否授權(quán)給了客戶端。
(3)如果資源所有者進(jìn)行了授權(quán),授權(quán)服務(wù)器會(huì)根據(jù)重定向URI將瀏覽器引導(dǎo)回客戶端。授權(quán)服務(wù)器傳回一個(gè)授權(quán)碼給客戶端,用于進(jìn)一步獲取訪問(wèn)令牌。
(4)客戶端在收到認(rèn)證碼后向認(rèn)證服務(wù)器請(qǐng)求訪問(wèn)令牌access token??蛻舳诵杼峤徽J(rèn)證碼與重定向URI
(5)認(rèn)證服務(wù)器會(huì)校驗(yàn)認(rèn)證碼,并比較重定向URI是否與步驟C一致,如果一致則返回訪問(wèn)令牌,并返回刷新令牌(refresh token,該領(lǐng)牌可選,用于訪問(wèn)領(lǐng)牌過(guò)期后的重新申請(qǐng)).
圖1 流程設(shè)計(jì)
如圖1,改進(jìn)后的認(rèn)證碼IDP服務(wù)流程如下:
(1)IDP為SaaS服務(wù)商及用戶簽發(fā)數(shù)字證書??紤]到實(shí)際應(yīng)用的簡(jiǎn)便性,IDP可僅對(duì)需使用IDP服務(wù)的應(yīng)用簽發(fā)數(shù)字證書。
(2)SaaS服務(wù)商通過(guò)將終端用戶的user-agent(一般為瀏覽器)引導(dǎo)到認(rèn)證授權(quán)服務(wù)器發(fā)起這個(gè)流程。SaaS服務(wù)商將標(biāo)識(shí)符(此處可使用數(shù)字證書序列號(hào))、請(qǐng)求作用域、本地狀態(tài),和一個(gè)重定向URI(此處的URI無(wú)提前注冊(cè),可根據(jù)應(yīng)用的實(shí)際需求進(jìn)行調(diào)整)等信息簽名后發(fā)給認(rèn)證服務(wù)器。
(3)授權(quán)服務(wù)器通過(guò)瀏覽器驗(yàn)證終端用戶身份(如有數(shù)字證書可用數(shù)字證書確認(rèn)身份,也可使用動(dòng)態(tài)口令、用戶名密碼等多種手段),并確定用戶是否授權(quán)給了SaaS服務(wù)商。
(4)如果用戶進(jìn)行了授權(quán), IDP傳回一個(gè)授權(quán)碼(該授權(quán)碼使用數(shù)字證書進(jìn)行加密)給SaaS服務(wù)商,用于進(jìn)一步獲取訪問(wèn)令牌。
(5)授權(quán)服務(wù)器會(huì)根據(jù)重定向URI將瀏覽器引導(dǎo)回SaaS服務(wù)商。SaaS服務(wù)商在收到認(rèn)證碼后進(jìn)行簽名,同時(shí)向認(rèn)證服務(wù)器請(qǐng)求訪問(wèn)令牌access token。SaaS服務(wù)商需提交認(rèn)證碼與重定向URI(此處的URI無(wú)提前注冊(cè),可根據(jù)應(yīng)用的實(shí)際需求進(jìn)行調(diào)整)
(6)認(rèn)證服務(wù)器會(huì)校驗(yàn)認(rèn)證碼、URI及其簽名,如果通過(guò)則返回訪問(wèn)令牌,并返回刷新令牌(refresh token,該領(lǐng)牌可選,用于訪問(wèn)領(lǐng)牌過(guò)期后的重新申請(qǐng)).
(7)SaaS服務(wù)商可使用令牌獲得用戶信息或訪問(wèn)用戶許可的資源。
本文對(duì)基本遵循OAuth 規(guī)范中的消息格式,僅對(duì)認(rèn)證碼請(qǐng)求消息進(jìn)行了調(diào)整。增加了Time(時(shí)間),signature(簽名)二個(gè)參數(shù),修改了client_id的意義,將其改為使用證書序列號(hào)。Time選項(xiàng)是按ISO8601規(guī)范編碼的時(shí)間,用于防止重放攻擊;signature為SaaS服務(wù)商對(duì)認(rèn)證碼請(qǐng)求消息的數(shù)字簽名。使用application/x-www-formurlencoded (注1)格式作為消息請(qǐng)求標(biāo)準(zhǔn)。其使用例子如下:
GET/authorize?response_type=code&client_id=s6Bh dRkqt3&state=xyz&redirect_uri=https%3A%2F%2Fclient%2 Eexample%2Ecom%2Fcb&time=2013-02-20T09:23:45&signat ure=Z2sh7lYcNuba4+L3uJErFdVltTreiDXk5Wl4O2XsJlmYwplm mu9uemyLuNXxJSBNRIlDS2RizU6PDJ0SGkThaxC1iqpQ1uqEEWgU 7Klr3/HqEvcn+7jXfKXHRw2MRjFlCkI1IZvAFE2hINicG3B5EO/wmTVHfE1OLgDPz0tVvnk= HTTP/1.1 Host: server.example.com
認(rèn)證令牌請(qǐng)求消息是SaaS服務(wù)商利用認(rèn)證碼請(qǐng)求訪問(wèn)令牌。OAuth2.0的訪問(wèn)令牌請(qǐng)求主要包括授權(quán)類型、認(rèn)證碼、重定向URI。本模型增加了簽名及時(shí)間參數(shù)。其編碼方式與認(rèn)證碼請(qǐng)求消息一致。認(rèn)證碼請(qǐng)求響應(yīng)、訪問(wèn)令牌響應(yīng)等消息格式,本文未作修改。
本文提出了基于數(shù)字證書與OAuth2.0的 IDP改進(jìn)模型,在原有OAuth2.0認(rèn)證碼授權(quán)的基礎(chǔ)上,引入了IDP服務(wù)的概念。同時(shí)利用數(shù)字證書增強(qiáng)了原有OAuth2.0認(rèn)證碼授權(quán)過(guò)程的安全性。與原有模型相比(1)本模型提出IDP可對(duì)SaaS服務(wù)商及用戶簽發(fā)數(shù)字證書。數(shù)字證書的使用可使IDP對(duì)SaaS服務(wù)商有一個(gè)提前的認(rèn)證過(guò)程。同使由于有了數(shù)字證書,IDP與SaaS服務(wù)商可使用點(diǎn)對(duì)點(diǎn)的加密,確保了認(rèn)證過(guò)程中的身份防偽、信息保密等功能。(2)重定向URI是OAuth2.0協(xié)議中重要的參數(shù),通過(guò)數(shù)字證書的使用,使得重定向URI無(wú)需提前注冊(cè),可根據(jù)實(shí)際需要發(fā)送,這樣增加了應(yīng)用開(kāi)發(fā)的靈活性。(3)IDP本身提供用戶身份認(rèn)證服務(wù)接口,SaaS服務(wù)商可使用訪問(wèn)令牌獲得用戶信息。SaaS層所有的軟件服務(wù)都可成為用戶資源服務(wù)器,也都可成為用戶授權(quán)的入口,因此在用戶授權(quán)的前提下,云端所有的軟件服務(wù)可實(shí)現(xiàn)用戶數(shù)據(jù)共享
[1]《利用OpenID和OAuth 進(jìn)行安全授權(quán)及風(fēng)險(xiǎn)防范的分析》劉為,郝梅
[2]《 云計(jì)算中的身份認(rèn)證技術(shù)研究》余幸杰,高能,江偉玉
[3]《基于OpenID 的可兼容身份認(rèn)證系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)》楊浩泉,皮冰鋒,彭酉,楊華,鄒綱,王主龍
[4] 《The OAuth 2.0 Authorization Protocol draft-ietfoauth-v2-23》
[注1] 《W3C.REChtml401-19991224》 Hors, A., Raggett, D.,and I.Jacobs, “HTML 4.01 Specification,” World Wide Web C onsortium Recommendation REC -html401-19991224, December 1999 (HTML).