OAuth是一個關(guān)于授權(quán)的開放標(biāo)準(zhǔn)焕檬,在無需用戶賬戶和密碼的情況下跃赚,允許用戶讓第三方應(yīng)用訪問該用戶在某一網(wǎng)站上存儲的私密資源(比如頭像唠帝、昵稱屯掖、性別等),目前最新的版本是2.0襟衰。
OAuth 2.0定義了四種授權(quán)方式贴铜,詳情可以參考文章
- 授權(quán)碼模式(authorization code)
- 簡化模式(implicit)
- 密碼模式(resource owner password credentials)
- 客戶端模式(client credentials)
這里只介紹授權(quán)碼模式,它是最嚴(yán)格和最完整的一個授權(quán)過程。它要求通過申請授權(quán)的服務(wù)器與授權(quán)方的服務(wù)器互動來取得令牌(Access Token)绍坝。
下面對這些流程進(jìn)行解釋徘意,App想要進(jìn)行第三方登錄都要事先在第三方平臺申請Client ID和 Client Secret
- 點(diǎn)擊第三方登錄,帶上Client ID跳轉(zhuǎn)到第三方授權(quán)頁面
- 在用戶通過授權(quán)之后轩褐,第三方平臺會對Client ID進(jìn)行驗證椎咧,通過驗證之后返回Authorization Code作為用戶認(rèn)可的憑證
- 回到APP,接收到Authorization Code之后會和App的服務(wù)器進(jìn)行通信把介,并把Authorization Code傳給服務(wù)器邑退,這時APP處于等待響應(yīng)的狀態(tài)
- 服務(wù)器將Authorization Code和Client Secret一起發(fā)送給第三方的服務(wù)器
- 第三方服務(wù)器通過驗證之后會返回Access Token,這時OAuth流程已經(jīng)結(jié)束劳澄。
- 服務(wù)器接收到Access Token之后地技,App服務(wù)器就可以使用Access Token作為用戶授權(quán)的令牌去第三方服務(wù)平臺請求用戶的信息
- 第三方平臺返回用戶的信息,APP服務(wù)器在自己都數(shù)據(jù)庫創(chuàng)建賬戶秒拔,以及用第三方平臺的用戶ID和自己服務(wù)器創(chuàng)建的ID進(jìn)行關(guān)聯(lián)
- APP服務(wù)器返回響應(yīng)莫矗,用戶登錄成功。
上面就是整個流程的分析砂缩,流程比較好理解作谚,但是為什么用戶要先拿到Authorization Code而不是直接返回Access Token呢?
答案是為了安全
OAuth 2.0當(dāng)初設(shè)計的目的之一不強(qiáng)制要求請求授權(quán)的一方使用Https庵芭,所以如果用戶直接拿到Access Token妹懒,則必須把Client Secret一起發(fā)送給服務(wù)器,使用http的情況下任何的中間節(jié)點(diǎn)都可能遭受中間人攻擊双吆。而Client Secret是絕對要保密的眨唬。OAuth只是要求請求授權(quán)的客戶端不必一定使用https,但是對于傳輸Access Token的服務(wù)器是要求要使用Https好乐。通過這種一次性的Authorization Code就可以確保只有合法者才能交換Access Token匾竿,對于潛在的黑客攔截監(jiān)聽是無用的。