在前面已經介紹過OAuth與OpenID,這兩種服務,Google都實現了。我們可以通過Google OAuth服務為Google 用戶的資源進行授權,如用戶通過第三方軟件調用Google Open API操作用戶的資源時,就需要用戶對第三方軟件授權;通過Google OpenID服務可以打通Google與其他支持OpenID服務網站之間的用戶體系。現在假如有另外一個網站,也想開放自己的Open API服務,但是又不想實現OAuth服務(畢竟實現OAUTH服務還是需要一些成本的),那該怎麼辦?它可不可以使用Google提供的OAuth服務,授權認證交給Google來處理?可以!但是OAuth授權也是基於用戶登錄來實現的,Google OAuth用戶體系只是Google的用戶體系,那又怎麼辦了?OpenID!對,將網站的用戶體系與Google用戶體系打通,並且使用Google OAuth服務來實現授權,即Google提出的OpenID + OAUTH的解決方案。
一、 OAUTH與OpenID
前面兩篇文章對OAUTH與OpenID均做過介紹,且Google均提供了這兩種服務,在此我們先簡要的回顧這兩種服務,具體介紹請參見相關文章。
OAUTH是一種開放的,基於用戶登錄的授權認證方式。如當用戶使用第三方軟件調用Google Open API去操作自己的Google服務資源時,用戶就要先對該軟件授權。授權過程中,第三方軟件會引導用戶登錄Google,進行用戶鑒權,用戶通過Google身份鑒權後才能對第三方軟件授權。顯然,Google OAUTH只能對Google用戶進行鑒權,其他用戶體系的用戶不能直接鑒權。
OpenID是一種開放的,去用戶中心的,用於打通各網站之間的用戶體系的服務。在支持OpenID的網站間,你可以使用任何一個網站的帳號或者Open ID去登錄任何一個網站。OpenID提供了類似單點登錄的用戶體驗,並且用戶無需在各個網站上注冊就可以使用該網站的資源,將用戶從繁重的帳號注冊與管理工作中解脫出來。當用戶使用OpenID登錄沒注冊的網站過程中,網站會引導用戶登錄OP(用戶OpenID注冊的網站),請求OP對用戶身份鑒權,用戶通過OP鑒權,網站才會容許用戶登錄。
若將OpenID與Google OAUTH結合,OpenID將第三方網站的用戶體系與Google用戶體系打通後,第三方網站便可使用Google OAUTH服務,對自己的用戶進行授權!交互示意圖如下圖所示:
二、 Google OAUTH + OpenID解決方案
Google提出了OpenID + OAUTH的解決方案,將兩者揉合在一起,具體流程如下圖所示:
1. Web應用請求用戶登錄;
2. 用戶選擇使用Google OpenID進行登錄;
3. Web應用請求發現Google認證服務URL;
4. Google向Web應用返回XRDS信息,其中包含Google認證服務URL;
5. Web應用請求用戶登錄Google服務,通過請求用戶授權;
6. Google引導用戶登錄;
7. 用戶輸入用戶名密碼進行登錄,同時確認是否對第三方軟件授權;
8. Google認證中心返回用戶ID與授權的Request Token給Web應用;
9. 用戶可以訪問受保護的資源,同時可以繼續第七部中Oauth認證余下的環節;
從上面的流程第五步可以看出,Google解決方案中,將OAUTH與OpenID的登錄操作合並在一起、並且在登錄的同時向Google發送Oauth請求,請求用戶授權。這樣一來,在第五步中,用戶登錄Google(OpenID中Google對用戶鑒權),同時請求對用戶授權(OAUTH中對用戶授權,同時無需再次登陸,因為前面OpenID已經登錄過了)。
三、Google OAUTH+OpenID Demo
Google提供了OAUTH + OpenID的DEMO,Demo演示地址如下:http://googlecodesamples.com/hybrid/
剛開始,用戶既沒OpenID登錄也沒OAUTH授權,如下圖所示:
接著,點擊上圖中login按鈕請求以Google提供的OpenID登錄,如下圖所示:
輸入用戶名與密碼登錄後,Google提醒您即將登陸到外部網站,外部網站申請對您的資源進行授權,您是否同意,如下圖所示:
點擊繼續登錄後,登錄成功,並且返回授權的Token,如下圖所示: