也許大家都有這樣的經歷與煩惱:當你為了使用某個網站的服務時(若你還沒在該網站上注冊過),你不得不先注冊一個帳號。當你在一堆的網站上注冊帳號後,你必需面臨管理這些帳號的煩惱。也許你會這樣考慮,不同網站注冊的帳號信息都用同一個用戶名與密碼,這樣也許會減輕你的煩惱,但是卻給你帶來的安全隱患,一旦你的帳號在某個網站洩漏後。OpenID正式基於解決這類問題而提出的一個國際標准,用於打通各大網站之間的用戶體系。你可以使用某一網站的帳號去登錄另一網站,只要這些網站都是實現了OpenID的服務。目前Google,Yahoo,Flickr,AOL等都支持OpenId服務。2009年2月初,Facebook也宣布加入OpenId基金會。
一、OpenID簡介
OpenID官方網站http://openid.net首頁對OpenID的介紹如下:OpenID is a free and easy way to use a single digital identity across the Internet. With one OpenID you can login to all your favorite websites and forget about online paperwork! 其大概意思就是說:OpenID是一個單一的、免費的數字身份標識,使用它,你就可以登錄你經常登錄的網站。
OpenID提高了互聯網服務的用戶體驗。顯而易見,就終端用戶而言,OpenID降低了用戶管理多個網站帳號的煩惱,用戶可以享受類似單點登錄的體驗。對於企業來說,OpenID降低了用戶帳號管理的成本。對於應用開發者來說,OpenID是一個開放的、去中心化的,免費的、以用戶為中心的身份標識體系。Java的一個優勢是跨平台,大家都熟悉的那句話:Write Once,Run Anywhere(一次編寫,到處運行),同樣,OpenId的優勢是:Register Once, Use Anywhere(一處注冊,到處使用)。
OpenId是一個以用戶為中心的數字身份識別框架,它具有開放、分散、自由等特性。OpenId的創建是基於這樣一個概念:我們可以通過URI(或者URL網址)來識別一個網站。同樣,我們也可以通過這樣的方式來識別一個用戶的身份。OpenId系統的身份認證就是通過URI來認證用戶身份。目前絕大部分網站都是通過用戶名與密碼來登錄認證用戶身份,這就要求大家在每個你要使用的網站上注冊一個帳號。如果使用OpenId,你可以在一個提供OpenId的網站上注冊一個OpenId,以後你可以使用這個OpenId去登錄支持OpenId的網站。這正是一處注冊,到處使用的體現。
二、OpenID相關術語
三、OpenID認證流程
OpenID一個典型的應用場景就是:當終端用戶登錄一個支持OpenID的網站(RP)時,與在該網站進行用戶登錄方式不同(該終端用戶也許沒有在該網站注冊過),該用戶選擇了以OpenID的方式登錄該網站。OpenID是該用戶在另一個網站(OP)注冊的一個URL。RP就會根據用戶提供的OpenID去發現OP,然後請求該OP對該用戶身份進行鑒權。OP收到RP請求後,會要求用戶登錄OP認證頁面進行鑒權,鑒權後,OP會提醒該用戶是否容許外部網站對你鑒權。用戶同意後,OP將鑒權結果返回給RP。
下面就OpenID的認證流程進行簡要的介紹,下圖就是OpenID的認證流程:
1. 終端用戶請求登錄RP網站,用戶選擇了以OpenID方式來登錄
2. RP將OpenId的登錄界面返回給終端用戶
3. 終端用戶以OpenID登陸RP網站
4. RP網站對用戶的OpenID進行標准化,此過程非常負責。由於OpenID可能是URI,也可能是XRI,所以標准化方式各不相同。具體標准化過程是:如果OpenID以xri://、xri://$ip或者xri://$dns開頭,先去掉這些符號;然後對如下的字符串進行判斷,如果第一個字符是=、@、+、$、!,則視為標准的XRI,否則視為HTTP URL(若沒有http,為其增加http://)。
5. RP發現OP,如果OpenId是XRI,就采用XRI解析,如果是URL,則用Yadis協議解析,若Yadis解析失敗,則用Http發現。
6. RP跟OP建立一個關聯。兩者之間可以建立一個安全通道,用於傳輸信息並降低交互次數。
7. OP處理RP的關聯請求
8. RP請求OP對用戶身份進行鑒權
9. OP對用戶鑒權,請求用戶進行登錄認證
10. 用戶登錄OP
11. OP將鑒權結果返回給RP
12. RP對OP的結果進行分析
13. RP分析後,如用戶合法,則返回用戶鑒權成功,可以使用RP服務
以上就是OpenId認證流程簡介。OpenID4Java是一個開源庫,提供了OpenID框架。OpenID4Java是對OpenID1.1和2.0規范的實現,目前它通過code.google.com系統進行維護。此項目初始代碼是由Sxip捐獻出來的,而後Atlassian等公司參與進來,並為實現支持2.0規范(屬性交換規范)的API貢獻了大量的工作。OpenID4Java項目地址:http://code.google.com/p/openid4java/
四、Yahoo OpenID服務
目前很多大公司如Google,Yahoo,AOL,Microsoft等等都支持OpenId。下面我們可以看看這個網站,他是支持openid,http://www.plaxo.com/
我們點擊右上角的登錄按鈕,請求登錄該網站,登錄頁面如下圖所示:
與傳統的登錄頁面不一樣的是,該登錄頁面還提供了以OpenID方式登錄的入口。我們選擇使用Yahoo用戶進行登錄,將跳轉到yahoo的登錄頁面,如下圖所示:
輸入用戶名與密碼,Yahoo提示您,您將要登錄到外部網站Plaxo,請求您的確認,如下所示:
同意後,您將以Yahoo OpenID登錄到plaxo網站。
五、OpenID的前景
光從技術角度來考量OpenID的前景時,我們都對他充滿著信息,激情。OpenID的出現,確實很該用戶友好的體驗,更方便用戶暢游互聯網。但是,這只是技術上的考量。OpenID的最終用戶是網民們。OpenID提出到現在,有多少人知道有OpenID的存在,甚至連身邊的程序員們都很少知道,更不用說普普通通的網民們了。所以從技術化的東西到被大家所熟知的技術,OpenID還有很長的路要走。過去,國內也有不少技術人員對OpenID充滿著激情,但是他們的激情是短暫的,或者不能稱之為激情。總結起來,OpenID在以下某些方面還令人擔憂。
一是:OpenID認知度太低,上面已解釋過。
二是:密碼安全度降低,只要OpenID的密碼被洩露,基本上所有的網站都被洩露。這與"一處注冊,到處使用"形成對應,即"一處洩露,到處洩露"。
三是:OpenID並非真正的Open,很多網站表面上支持OpenID,實際上,還是不斷的騷擾OpenID用戶,在他們網站上注冊帳號,在背後偷偷的沉澱OpenID用戶。所以,就目前來說,OpenID對於集團內各子公司用戶體系的打通還是可行的,對於與外部公司是否使用OpenID還得謹慎點。