潘 焱
(上海市數(shù)字證書認證中心有限公司 上海 200040)
由于云計算中的用戶認證與權(quán)限管理與傳統(tǒng)網(wǎng)站的認證方式相比要復雜的多,因此服務(wù)、平臺、基礎(chǔ)設(shè)施之間的認證授權(quán)也逐步成為制約云發(fā)展的安全需求。2011年5月發(fā)布的OAuth 2.0的草案,較好的解決了云時代用戶認證與授權(quán)的問題,雖然推出時間不長,但已成為行業(yè)內(nèi)應用最廣泛的標準之一。OAuth 2.0是在OpendID的基礎(chǔ)上提出的。OpenID就是將用戶的密碼安全的存儲在一個OpenID 服務(wù)網(wǎng)站上,其它網(wǎng)站都可通過OpenID來驗證用戶身份。OpenID的提出,在很大程度上解決了用戶在每個網(wǎng)站都需要注冊用戶名和密碼的問題,IDP(身份提供者 Identity Provider)是解決這一問題的關(guān)鍵角色。隨著云時代的到來,僅僅解決用戶認證已經(jīng)不能滿足應用的需求了,OAuth協(xié)議就是適應這一需求而推出的。OAuth規(guī)范側(cè)重解決用戶的授權(quán)問題,包括四種授權(quán)類型。本文針對其中應用比較廣泛的Authorization Code模式提出了基于數(shù)字證書的IDP改進模型。
OAuth2.0規(guī)定了四種授權(quán)模式,比較常用的是認證碼授權(quán)模式認證(authorization code grant type)。這種模式的核心是通過認證碼與重定向URI的配合,使客戶端可以獲得訪問令牌(access tokens),從而使得客戶端可獲得授權(quán)訪問資源,其基本步驟如下:
(1)客戶端通過將終端用戶的用戶代理軟件(一般為瀏覽器)引導到認證授權(quán)服務(wù)器發(fā)起這個流程。客戶端將標識符(client identifier)、請求作用域(requested scope)、本地狀態(tài)(local state),和一個重定向URI(在訪問被許可或被拒絕后授權(quán)服務(wù)器會重新將用戶代理軟件引導回這個URI)等信息發(fā)給認證服務(wù)器。
(2)授權(quán)服務(wù)器通過瀏覽器驗證終端用戶身份,并確定用戶是否授權(quán)給了客戶端。
(3)如果資源所有者進行了授權(quán),授權(quán)服務(wù)器會根據(jù)重定向URI將瀏覽器引導回客戶端。授權(quán)服務(wù)器傳回一個授權(quán)碼給客戶端,用于進一步獲取訪問令牌。
(4)客戶端在收到認證碼后向認證服務(wù)器請求訪問令牌access token??蛻舳诵杼峤徽J證碼與重定向URI
(5)認證服務(wù)器會校驗認證碼,并比較重定向URI是否與步驟C一致,如果一致則返回訪問令牌,并返回刷新令牌(refresh token,該領(lǐng)牌可選,用于訪問領(lǐng)牌過期后的重新申請).
圖1 流程設(shè)計
如圖1,改進后的認證碼IDP服務(wù)流程如下:
(1)IDP為SaaS服務(wù)商及用戶簽發(fā)數(shù)字證書。考慮到實際應用的簡便性,IDP可僅對需使用IDP服務(wù)的應用簽發(fā)數(shù)字證書。
(2)SaaS服務(wù)商通過將終端用戶的user-agent(一般為瀏覽器)引導到認證授權(quán)服務(wù)器發(fā)起這個流程。SaaS服務(wù)商將標識符(此處可使用數(shù)字證書序列號)、請求作用域、本地狀態(tài),和一個重定向URI(此處的URI無提前注冊,可根據(jù)應用的實際需求進行調(diào)整)等信息簽名后發(fā)給認證服務(wù)器。
(3)授權(quán)服務(wù)器通過瀏覽器驗證終端用戶身份(如有數(shù)字證書可用數(shù)字證書確認身份,也可使用動態(tài)口令、用戶名密碼等多種手段),并確定用戶是否授權(quán)給了SaaS服務(wù)商。
(4)如果用戶進行了授權(quán), IDP傳回一個授權(quán)碼(該授權(quán)碼使用數(shù)字證書進行加密)給SaaS服務(wù)商,用于進一步獲取訪問令牌。
(5)授權(quán)服務(wù)器會根據(jù)重定向URI將瀏覽器引導回SaaS服務(wù)商。SaaS服務(wù)商在收到認證碼后進行簽名,同時向認證服務(wù)器請求訪問令牌access token。SaaS服務(wù)商需提交認證碼與重定向URI(此處的URI無提前注冊,可根據(jù)應用的實際需求進行調(diào)整)
(6)認證服務(wù)器會校驗認證碼、URI及其簽名,如果通過則返回訪問令牌,并返回刷新令牌(refresh token,該領(lǐng)牌可選,用于訪問領(lǐng)牌過期后的重新申請).
(7)SaaS服務(wù)商可使用令牌獲得用戶信息或訪問用戶許可的資源。
本文對基本遵循OAuth 規(guī)范中的消息格式,僅對認證碼請求消息進行了調(diào)整。增加了Time(時間),signature(簽名)二個參數(shù),修改了client_id的意義,將其改為使用證書序列號。Time選項是按ISO8601規(guī)范編碼的時間,用于防止重放攻擊;signature為SaaS服務(wù)商對認證碼請求消息的數(shù)字簽名。使用application/x-www-formurlencoded (注1)格式作為消息請求標準。其使用例子如下:
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
認證令牌請求消息是SaaS服務(wù)商利用認證碼請求訪問令牌。OAuth2.0的訪問令牌請求主要包括授權(quán)類型、認證碼、重定向URI。本模型增加了簽名及時間參數(shù)。其編碼方式與認證碼請求消息一致。認證碼請求響應、訪問令牌響應等消息格式,本文未作修改。
本文提出了基于數(shù)字證書與OAuth2.0的 IDP改進模型,在原有OAuth2.0認證碼授權(quán)的基礎(chǔ)上,引入了IDP服務(wù)的概念。同時利用數(shù)字證書增強了原有OAuth2.0認證碼授權(quán)過程的安全性。與原有模型相比(1)本模型提出IDP可對SaaS服務(wù)商及用戶簽發(fā)數(shù)字證書。數(shù)字證書的使用可使IDP對SaaS服務(wù)商有一個提前的認證過程。同使由于有了數(shù)字證書,IDP與SaaS服務(wù)商可使用點對點的加密,確保了認證過程中的身份防偽、信息保密等功能。(2)重定向URI是OAuth2.0協(xié)議中重要的參數(shù),通過數(shù)字證書的使用,使得重定向URI無需提前注冊,可根據(jù)實際需要發(fā)送,這樣增加了應用開發(fā)的靈活性。(3)IDP本身提供用戶身份認證服務(wù)接口,SaaS服務(wù)商可使用訪問令牌獲得用戶信息。SaaS層所有的軟件服務(wù)都可成為用戶資源服務(wù)器,也都可成為用戶授權(quán)的入口,因此在用戶授權(quán)的前提下,云端所有的軟件服務(wù)可實現(xiàn)用戶數(shù)據(jù)共享
[1]《利用OpenID和OAuth 進行安全授權(quán)及風險防范的分析》劉為,郝梅
[2]《 云計算中的身份認證技術(shù)研究》余幸杰,高能,江偉玉
[3]《基于OpenID 的可兼容身份認證系統(tǒng)設(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).