OpenID協議
背景
當我們要使用一個網站的功能時,一般都需要註冊想用的帳號。現在的互聯網應用很多,一段時間之後你會發現你註冊了一堆帳號密碼,根本記不住。
你可能會想到所有的網站都用同一套用戶名和密碼,這樣雖然能解決帳號管理的問題,但也加大了帳號密碼泄露的風險。
雖然,現在的網站有提供簡訊驗證碼登錄技術,但是今天我們要聊的是一個比較「古老」的技術——OpenID,看看之前的技術是怎麼解決密碼太多不便於管理的問題的。
寫這篇文章的目的更多的是興趣使然,因為實踐過程中不太可能會單純的使用OpenID登錄,中國也幾乎沒見到支援OpenId的網站,至少主流的大廠沒支援。但是我個人覺得,用不到並不代表你一定不需要知道,了解技術發展的歷史,不僅可以給我們借鑒,而且能提升自己的技術底蘊。(哈哈,有點裝X~~)
基礎概念
在正式介紹OpenID之前,我再啰嗦幾個基礎概念。
-
Authentication: 身份鑒別,簡稱認證,簡單講就是怎麼鑒定你就是某個人;
-
Authorization Server/Identity Provider:把負責 認證的服務 稱為 AuthorizationServer 或者 IdentityProvider,簡稱IDP;
-
Authorisation: 資源訪問,簡稱授權,簡單講就是給某個人賦予某些許可權;
-
Service Provider/Resource Server:把負責提供資源(API調用)的服務稱為 ResourceServer 或者 ServiceProvider,簡稱 SP
OpenID相關的幾個概念
- User:網站訪問者操作的瀏覽器
- RP:Relying Party ;服務提供者,就是用戶要訪問的網站。
- OP:OpenID Provider ;OpenID提供者,就是提供OpenID註冊的服務商。
OpenID簡介
OpenID 是由LiveJournal和SixApart開發的一套身份驗證系統,是一個以用戶為中心的數字身份識別框架,它具有開放、分散、自由等特性。
OpenID 的創建基於這樣一個概念:我們可以通過 URI (又叫 URL 或網站地址)來認證一個網站的唯一身份,同理,我們也可以通過這種方式來作為用戶的身份認證。它不基於某一應用網站的註冊程式,而且不限制於單一網站的登錄使用。OpenID帳號可以在任何OpenID應用網站使用,從而避免了多次註冊、填寫身份資料的繁瑣過程。簡單言之,OpenID就是一套以用戶為中心的分散式身份驗證系統,用戶只需要註冊獲取OpenID之後,就可以憑藉此OpenID帳號在多個網站之間自由登錄使用,而不需要每上一個網站都需要註冊帳號。
OpenID的工作流程
假設你已經擁有一個在A網站(A網站就是OP角色)註冊獲得的OpenID帳號,B網站(B網站就是RP角色)支援OpenID帳號登錄使用,而且你從未登錄過。此時你在B網站的相應登錄介面輸入你的OpenID帳號進行登錄的時候,瀏覽器會自動轉向A網站的某個頁面進行身份驗證。這時你只要輸入你在A網站註冊時候提供的密碼登錄A網站,對B網站進行驗證管理(永久允許、只允許一次或者不允許)後,頁面又會自動轉到B網站。如果你選擇了允許,那就會登錄進入B網站。這個時候你就可以以你的OpenID帳戶身份實現B網站的所有功能。
上面描述了B網站使用A網站提供的OpenID進行登錄,你也可以使用這個OpenId登錄其他支援OpenID的網站。
OpenID的獲取流程
- 首先用戶選擇一個OpenID 服務提供者,來註冊 OpenID 帳號(跟傳統的網站註冊無異),註冊後用戶得到一個 OpenID網址(OpenID URL),如http:/collinye.openid.com ,可以簡單的理解為用戶名。
- 訪問支援 OpenID 的網站,在登錄時,輸入你的 OpenID網址,通常此類登錄頁面的輸入框會有如上圖所示 OpenID 標誌,然後點登錄。
- 之後,會跳轉你的OpenID 服務提供者的網站,並要求你輸入註冊時填寫的密碼,驗證密碼通過後會詢問你是否允許該網站使用你的 OpenID 進行登錄,經過允許後會跳轉回原網站,並顯示登錄成功,之後你就可以以註冊者的身份訪問該網站。
認證流程
- 終端用戶請求登錄RP網站,用戶選擇了以OpenID方式來登錄;
- RP將OpenID的登錄介面返回給終端用戶;
- 用戶輸入OpenID,RP網站對用戶的OpenID進行標準化,此過程比較複雜,因為OpenID可能是URI,也可能是XRI,所以標準化方式各不相同;
- RP和OP進行連接;
- RP請求OP對用戶身份進行登錄檢查,OP對用戶登錄檢查,如果用戶還沒有登錄,請求用戶進行登錄認證;
- 用戶登錄OP、登錄完檢測RP請求哪些資訊,如果沒有需有用補填(OpenID主要負責認真,用戶首次登陸註冊可能還需要其他必要資訊,可以在這個步驟補全);
- OP將登錄結果返回給RP,RP對OP的結果進行分析,RP分析後,如用戶合法,則返回用戶登錄成功,可以使用RP服務。
OPENID優缺點
優點
對用戶
-
簡化註冊登錄流程:一定程度上避免了重複註冊、填寫身份資料的繁瑣過程,不需要註冊郵件確認,登錄更快捷。
-
一處註冊,處處通行:免去記憶大量帳號的麻煩,一個OpenID就在任何支援OpenID的網站自由登錄。
-
減少密碼泄露風險:頻繁登錄各種網站,容易被垃圾網站暗地裡收集密碼和資料,或者冒充用戶身份發送垃圾資訊。
-
用戶擁有帳號資訊控制權:根據對網站的信任程度,用戶可以清楚的控制哪些profile資訊可以被共享,例如姓名、地址、電話號碼等。
對網站
-
共享用戶資源:給所有支援 OpenID 的網站帶來了價值。
-
已經有相當數量的高端註冊用戶可以直接使用,不必從零開始;
-
可以不負擔自己建立會員系統或登錄功能所需要的開發成本、機器、頻寬、安全費用;
-
用戶數據是安全的,用戶數據不統一存儲,用戶可以任意選擇、更換存儲的server。沒有組織,沒有任何一個地方可以做root,沒有任何一個機構或者個人能夠從這裡面獲利。
缺點
-
任何人都可以建立一個網站提供OpenID驗證服務,而網站性能參差不齊,導致OpenID的驗證過程不是很穩定。
-
如果提供OpenID驗證服務的網站突然關閉的話,可能會導致大量用戶無法使用多個網站的服務。
-
目前幾乎所有支援OpenID的網站都很謹慎地將其做為一種可供選擇的輔助登錄方法,這會在很大程度上阻礙OpenID的發展。
-
目前支援OpenID的網站還不多,其獨特的使用方法並不被多數用戶所熟悉。
-
密碼安全度降低,只要OpenID的密碼被泄露,基本上所有的網站都被泄露。這與”一處註冊,到處使用”形成對應,即”一處泄露,到處泄露”。
-
OpenID並非真正的Open,很多網站表面上支援OpenID,實際上,還是不斷的騷擾OpenID用戶,在他們網站上註冊帳號,在背後偷偷的沉澱OpenID用戶。所以,就目前來說,OpenID對於集團內各子公司用戶體系的打通還是可行的,對於與外部公司是否使用OpenID還得謹慎點。
OpenID發展歷程–OIDC
原始的OpenID,也就是OpenID 1.0,它並不是真正的商業應用,但這個協議讓行業領導者思考什麼是可能的。
OpenID 2.0設計更為完善,提供良好的安全性保證。然而,其自身存在一些設計上的局限性,最致命的是其中依賴方必須是網頁,但不能是本機應用程式;此外它還要依賴XML,這些都會導致一些應用問題。
OIDC,OpenID Connect是OpenID的第三代技術。OpenID Connect從SAML和OpenID 1.0/2.0中做了大量借鑒。OIDC不僅支援用戶認證,還支援用戶授權。
後面的文章中會介紹OIDC的相關內容。
支援OpenID的網站
待更新…
參考
- //www.cnblogs.com/cjsblog/p/9174797.html
- //www.cnblogs.com/shuidao/p/3463947.html
- //www.cnblogs.com/collinye/archive/2010/07/29/1788328.html
- OpenID簡介