第三方接入總結(jié)
[TOC]
本文主要講解OAuth2.0協(xié)議和github、微博、QQ三個平臺提供的接入流程,介紹nodejs下十分好用的認證授權插件passport.js。本文代碼基于nodejs-express。
OAuth2.0介紹
?在說OAuth協(xié)議之前,想說一下OpenID。在2005年的夏天,一個開源社區(qū)為了解決一個其它現(xiàn)有web身份認證技術不容易解決的問題時,制定了OpenID,OpenID是一個認證(Authentication)協(xié)議,這個協(xié)議讓第三方應用程序在不獲取你密碼的情況下認證你的身份,OpenID和OAuth是兩個經(jīng)常放在一起比較的web身份認證技術,但OAuth比起OpenID,更像是一個授權(Authorization)協(xié)議,是讓第三方應用程序在不獲取你密碼的情況下獲取你的授權去對授權提供商或者說是資源提供商請求你授權的資源,拿到OpenID就像給別人指,這棟房子是我的,我可以拿點東西給你看看,而拿到OAuth授權就像你給別人說,這棟房子是我的,這個鑰匙給你,但只能開大門不能進臥室,哪些可以動哪些可以開都是你說了算,并且你可以隨時方便的收回這把鑰匙。
?OAuth2.0是2006年提出來的新一代OAuth版本,比起OAuth1.x,它簡化了認證交互過程,增加了認證機制,使用了SSL,去掉了一個叫做客戶端token secret的東西,這也導致了OAuth升級需要改動代碼,并且沒有了1.0版本的安全bug(1.0a修復),這個安全bug主要是回調(diào)地址設定方式導致的。
?OAuth2.0協(xié)議主要有四個角色,資源所有者即用戶,資源服務器,授權服務器和用戶代理即客戶端,這四個角色主要是完成了這樣一個流程,客戶端與服務器提供商之前,有一個通過OAuth協(xié)議完成的授權服務器,客戶端有從服務端獲取的唯一ID,客戶端不能直接登錄服務器提供商,需要先通過用戶在授權服務器取得授權碼,并且拿著獲得用戶授權的授權碼在授權層換取accessToken,通過這個token向資源服務器請求用戶授權信息。