技術宅
IETF為了解決上述第三方登錄的問題,專門設立了OAuth工作組,該工作組的主要內(nèi)容是設立開放授權的標準。
OAuth的初步標準,是允許第三方網(wǎng)站在用戶授權的前提下,訪問用戶存儲在服務商那里的各種信息,而這種授權無需將用戶名和密碼提供給該第三方網(wǎng)站。OAuth升級到2.0版之后,IETF將此標準進一步延伸,推出了專門解決第三方客戶端使用身份認證問題的OIDC(OpenID Connect)協(xié)議。
目前很多網(wǎng)站使用的第三方登錄,大部分是基于OAuth 2.0協(xié)議或OIDC協(xié)議。以知乎網(wǎng)站為例,在登錄界面中切換到“社交帳號”登錄,它即顯示出支持使用微信、QQ或者新浪微博賬號直接登錄(圖1)。點擊相應的國標,比如新浪微博,就會轉(zhuǎn)入新浪網(wǎng)站的認證界面,簡單點擊同意授權知乎使用部分信息之后,即可返回知乎網(wǎng)站登錄、瀏覽了,十分方便。
①知乎網(wǎng)站的登錄界面
按傳統(tǒng)方法登錄一個網(wǎng)站,正常的流程是先在網(wǎng)站注冊用戶名和密碼,網(wǎng)站會將用戶的注冊信息寫入服務器數(shù)據(jù)庫,這樣用戶再次登錄時,網(wǎng)站會對用戶輸入的賬號和密碼進行校驗,如果一致則允許登錄。顯然這種傳統(tǒng)的方法需要我們在每個網(wǎng)站都要注冊一個賬號和密碼(圖2)。
第三方登錄則將用戶注冊、賬號驗證和需要登錄的網(wǎng)站分開,在第三方登錄中主要涉及提供賬號的服務商和需要登錄的網(wǎng)站。以QQ賬號登錄“攝圖網(wǎng)”為例,這里我們將提供服務的騰訊稱為“第一方”,攝圖網(wǎng)稱為“第三方”(圖3)。
②傳統(tǒng)網(wǎng)站登錄圖解
③第三方登錄完整流程圖解
首先,當用戶在第三方選擇QQ登錄時,需要登錄的網(wǎng)站會通過第三方登錄SDK向第一方平臺發(fā)送登錄請求。第三方登錄SDK是提供授權服務的第—方網(wǎng)站開發(fā)的,比如騰訊針對旗下賬號登錄授權在https://connect.qq.com/manage.html#/提供開放接入功能,申請接入的網(wǎng)站只要按照騰訊的要求添加接入代碼就可以使用開放登錄服務。這樣我們在攝圖網(wǎng)登錄界面點擊QQ國標后,將會自動跳轉(zhuǎn)到騰訊授權界面,這是向騰訊發(fā)送登錄請求(圖4)。
第—方平臺接收到登錄請求,它會先確認用戶是否已經(jīng)成功登錄第一方平臺的賬戶,如果“是”,則準備一鍵登錄;如果“否”,則要求用戶先手動登錄第—方平臺??梢钥吹皆谔D(zhuǎn)到騰訊授權頁面后,這里的頁面會檢測用戶的QQ賬號是否登錄(圖5)。
如果用戶已經(jīng)成功登錄第—方平臺賬戶,那么第一方平臺會返回唯一的不變ID (OpenID)給第三方網(wǎng)站。比如在上述頁面中,用戶成功登錄QQ后,這時騰訊就會向攝圖網(wǎng)返回一個標識用戶身份的ID。接著第三方網(wǎng)站會將這個ID儲存到自己的服務器上,下次用戶再次登錄時只要校驗這個ID是否正確即可??梢钥吹皆跀z圖網(wǎng)的個人中心,用戶名正是自己的QQ呢稱,這就是一個典型的第三方登錄實例(圖6)。
⑥QQ登錄攝圖網(wǎng)
從上文可以看出,第三方登錄和傳統(tǒng)登錄方式完全不同。這里第三方網(wǎng)站的賬號注冊及密碼驗證是通過第—方網(wǎng)站已有的賬號來完成的,第三方網(wǎng)站獲得的只是第—方網(wǎng)站返回的用戶信息ID而已。以上面的攝圖網(wǎng)為例,它并沒有取得實際的QQ賬號和密碼,所取得的不過是騰訊網(wǎng)站授權的部分用戶信息。因為賬號和密碼信息都是保存在騰訊的網(wǎng)站上,所以即使攝圖網(wǎng)被黑客入侵或者數(shù)據(jù)泄露,這里泄露的也只是和QQ賬號對應的OpenID而已,從而有效地杜絕了“拖庫”之類的事件所造成的損失。
當然,以上所謂的安全性,是基于第—方網(wǎng)站而言的,只有第一方網(wǎng)站的技術可靠,才有真正的安全可言。因此在使用類似QQ、微信賬號登錄其他網(wǎng)站時,一定要為自己的第一方賬號設置一個強健的密碼,否則這個密碼的泄露,可能會導致自己的其他所有第三方網(wǎng)站隱私的泄露!
對于用戶來說,第三方登錄減少了自己記憶密碼的負擔,并且可以更好地保護自己賬號和密碼的安全。而對于網(wǎng)站來說,因為第三方登錄賬戶和密碼驗證都是第一方完成,這樣既可以減少用戶數(shù)據(jù)的維護工作,同時還可以更好地擴展市場,比如支持QQ登錄,那么理論上來說所有QQ注冊用戶都是自己的用戶。用戶得到了方便,網(wǎng)站減輕了資源負擔,達到真正的雙贏。