API接口入門(三):用戶授權(quán)流程原理

12 評(píng)論 24889 瀏覽 279 收藏 9 分鐘

本文通俗易懂地剖析用戶授權(quán)的設(shè)計(jì)原理和四種授權(quán)模式,重點(diǎn)介紹授權(quán)碼登錄模式,適合閱讀的人群:開(kāi)放平臺(tái)/第三方合作的產(chǎn)品經(jīng)理,初入職場(chǎng)的產(chǎn)品經(jīng)理。

1. 應(yīng)用場(chǎng)景

我們每個(gè)人都遇到過(guò)授權(quán)登錄的環(huán)節(jié),授權(quán)登錄的應(yīng)用無(wú)孔不入,可能你是在授權(quán)應(yīng)用權(quán)限,或是授權(quán)賬戶登錄,或是授權(quán)個(gè)人信息。

我們常見(jiàn)的應(yīng)用場(chǎng)景一般有以下:

  • 新安裝應(yīng)用:授權(quán)獲取存儲(chǔ)空間,設(shè)備信息等(手機(jī)原生彈窗)
  • 支付寶授權(quán)登錄淘寶:授權(quán)使用支付賬戶登錄淘寶APP(淘寶原生頁(yè)面)
  • 微信打開(kāi)美團(tuán)外賣:授權(quán)獲取你的頭像和地理位置(微信原生彈窗)

因而授權(quán)登錄是應(yīng)用間交互的重要且廣泛的步驟,深入了解過(guò)其中的原理很有必要。

2. 授權(quán)登錄是什么?

以美團(tuán)外賣授權(quán)獲取你的頭像和地理位置為例:

  • 頭像和地理位置屬于你的個(gè)人信息,如需要傳輸,必須經(jīng)得本人的同意,法律不允許默認(rèn)傳輸。
  • 授權(quán)登錄是經(jīng)得資源所有者(亦即是用戶)同意,服務(wù)提供商(亦即是微信,他為你提供授權(quán)服務(wù))提供授權(quán)服務(wù)和應(yīng)用方(他來(lái)使用你的授權(quán))使用授權(quán)的過(guò)程。

字面意思就是如下圖流程:

值得關(guān)注的是第3步和第4步:當(dāng)你在授權(quán)的過(guò)程中,實(shí)則是你和微信的直接交互,與美團(tuán)外賣小程序無(wú)關(guān)。

亦即是:你是跟微信同意授權(quán),也是微信接收到你的“同意”的指令,即使在網(wǎng)站用微信登錄也是如此,如豆瓣登錄,需要微信掃描二維碼,確保授權(quán)動(dòng)作保留和發(fā)生在微信自己的環(huán)境內(nèi)。

3. 授權(quán)登錄的模式

那么從形式來(lái)說(shuō),授權(quán)登錄可以分為靜默授權(quán)和手動(dòng)授權(quán)兩種模式:

  • 靜默授權(quán):一般是用于獲取一些類似于用戶ID的信息,比如每個(gè)用戶在微信的ID被稱為openid,這種ID只是用戶的唯一身份認(rèn)證(相當(dāng)于編號(hào)),不包含個(gè)人信息,應(yīng)用獲取openid并不能分析出你的手機(jī)號(hào)和身份證號(hào)這些個(gè)人信息。顯然,很多用戶都不知道openid是什么,總不能彈個(gè)彈窗問(wèn)用戶“你是否同意傳輸openid”吧。因而這類傳輸,用戶是無(wú)感的,用戶只需訪問(wèn)了某個(gè)頁(yè)面,后臺(tái)會(huì)向微信請(qǐng)求拿到你的openid。
  • 手動(dòng)授權(quán):這種亦即是我們上文提到的用戶場(chǎng)景,這類型場(chǎng)景需要獲取的信息是你的個(gè)人信息,比如頭像,昵稱,手機(jī)號(hào)和地址等等。這些個(gè)人信息是必須經(jīng)過(guò)用戶手動(dòng)點(diǎn)擊同意的。

4. OAuth2原理及剖析

以上第2點(diǎn)是授權(quán)的基本簡(jiǎn)化,本節(jié)是更重點(diǎn)介紹OAuth2的系統(tǒng)鏈路流程(無(wú)論是靜默或是手動(dòng),系統(tǒng)鏈路一致,只是形式的區(qū)分)。目前市面上涉及授權(quán),權(quán)限申請(qǐng)的業(yè)務(wù)均通過(guò)OAuth2的方法進(jìn)行設(shè)計(jì)。

OAuth2具體可以分為以下四種:

  1. 授權(quán)碼模式(authorization code)【重點(diǎn)】
  2. 簡(jiǎn)化模式(implicit)
  3. 密碼模式(resource owner password credentials)
  4. 客戶端模式(client credentials)

4.1 授權(quán)碼模式

其中最重要的就是第一種授權(quán)碼模式,接下來(lái)我以企業(yè)微信授權(quán)碼方法做解析,其流程圖非常清晰。

例子講解:

場(chǎng)景:該身份授權(quán)是用戶在企業(yè)微信使用第三方應(yīng)用時(shí)拉起授權(quán)頁(yè)面的流程。類似于你在微信打開(kāi)餓了么小程序。

系統(tǒng)交互的步驟:

  1. 用戶在企業(yè)微信打開(kāi)一個(gè)A應(yīng)用。此時(shí)A應(yīng)用通過(guò)靜默推送獲取到用戶的userid,發(fā)現(xiàn)這個(gè)用戶沒(méi)有頭像和昵稱信息在A應(yīng)用的數(shù)據(jù)庫(kù)。
  2. 此時(shí),A應(yīng)用調(diào)用企業(yè)微信的OAuth認(rèn)證鏈接,這個(gè)鏈接要帶上企業(yè)ID(表明應(yīng)用方),權(quán)限獲取范圍(頭像+昵稱),標(biāo)記本次授權(quán)的編號(hào)(state)和授權(quán)完跳轉(zhuǎn)的地址,做好鏈接之后,向微信發(fā)送過(guò)去。
  3. 企業(yè)微信收到請(qǐng)求后,校驗(yàn)企業(yè)ID和授權(quán)跳轉(zhuǎn)的地址是否對(duì)應(yīng)。如果驗(yàn)證通過(guò),企業(yè)微信會(huì)給A應(yīng)用一個(gè)令牌(code),并在前端打開(kāi)企業(yè)微信的授權(quán)頁(yè)面(該頁(yè)面由企業(yè)微信管理)。
  4. 用戶點(diǎn)擊授權(quán)了之后,企業(yè)微信可以利用code和state向企業(yè)微信請(qǐng)求用戶信息API,獲得用戶token,最終獲得指定用戶信息。
  5. 同時(shí)用戶點(diǎn)擊授權(quán)后,企業(yè)微信關(guān)閉授權(quán)頁(yè),并跳轉(zhuǎn)到A應(yīng)用在第2步提供的跳轉(zhuǎn)地址。

4.2 簡(jiǎn)化模式

請(qǐng)記住第一個(gè)模式中的第(1)步和第(2)步都需要A應(yīng)用處理,簡(jiǎn)化模式就是簡(jiǎn)化了第(2)步。

以下在微信的場(chǎng)景僅用于舉例:

  1. 用戶點(diǎn)擊應(yīng)用入口之后,微信直接讓用戶是否同意授權(quán)(授權(quán)的內(nèi)容和觸發(fā)時(shí)間提前配置好),用戶點(diǎn)擊同意。
  2. 用戶同意后,跳轉(zhuǎn)到該應(yīng)用在后臺(tái)預(yù)留的地址,并且微信把訪問(wèn)令牌直接告訴應(yīng)用。
  3. 應(yīng)用利用訪問(wèn)令牌找微信獲取用戶信息,完成。

此處你有沒(méi)有發(fā)現(xiàn),前面授權(quán)的過(guò)程并不需要應(yīng)用本身參與,這個(gè)就是比授權(quán)碼模式簡(jiǎn)化的地方。但這種模式不支持用戶令牌的更新,也就是用戶第一次授權(quán)過(guò)期了之后,下一次又需要重新手動(dòng)授權(quán)。

4.3 密碼模式

這種模式很直接,相當(dāng)于你把你微信的賬戶密碼告訴餓了么,餓了么利用你的賬戶密碼去獲取信息。這種方式極其不安全,用戶的賬戶信息隨時(shí)會(huì)被外泄。

4.4 客戶端模式

這種其實(shí)不屬于授權(quán),實(shí)則就是兩個(gè)應(yīng)用間直接進(jìn)行信息傳輸,與用戶無(wú)關(guān)。

5. 總結(jié)

  1. 授權(quán)分為靜默授權(quán)和手動(dòng)授權(quán),一般出現(xiàn)在打開(kāi)應(yīng)用登錄的環(huán)節(jié),應(yīng)用廣泛。
  2. 授權(quán)的組件或頁(yè)面必須在擁有數(shù)據(jù)的應(yīng)用中,這樣才能確保用戶在授權(quán)頁(yè)上同意協(xié)議,清晰看到傳輸?shù)臄?shù)據(jù)范圍,以及確保用戶親手同意授權(quán)。
  3. 授權(quán)分為四個(gè)模式,其中授權(quán)碼模式是應(yīng)用最廣泛,最重要的模式。
  4. 授權(quán)碼模式亦即是A應(yīng)用拼接企業(yè)參數(shù)向企業(yè)微信請(qǐng)求打開(kāi)授權(quán)頁(yè)面,獲取用戶授權(quán)碼code,再利用code獲得用戶的token,最終獲取用戶信息。

相關(guān)閱讀

API接口入門(一):讀懂API接口文檔

API接口入門(一):讀懂API接口文檔

 

作者:就是愛(ài)睡覺(jué),電商和金融業(yè)行業(yè)的產(chǎn)品,以TO B業(yè)務(wù)為主,文章是用于記錄自己在產(chǎn)品工作的思考和想法,希望有想法的小伙伴共同交流。

本文由 @就是愛(ài)睡覺(jué) 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載

題圖來(lái)自Unsplash,基于CC0協(xié)議

更多精彩內(nèi)容,請(qǐng)關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號(hào)或下載App
評(píng)論
評(píng)論請(qǐng)登錄
  1. API接口入門系列三篇文章寫的好棒,小白從中學(xué)到了很多,感謝作者的分享

    來(lái)自廣東 回復(fù)
  2. 寫的真好,后面這部分我的腦袋開(kāi)始不夠用了

    來(lái)自上海 回復(fù)
  3. 感謝精彩的分享

    來(lái)自浙江 回復(fù)
  4. 太厲害了,我也是產(chǎn)品經(jīng)理,但對(duì)技術(shù)知之甚少,有推薦的課程嗎?

    回復(fù)
  5. 感恩分享

    來(lái)自北京 回復(fù)
  6. 非常棒,不懂技術(shù)的也能看懂

    來(lái)自上海 回復(fù)
  7. 這樣的文章真好,易懂

    來(lái)自福建 回復(fù)
  8. 感覺(jué)像是技術(shù)人員研究的東西啊

    來(lái)自北京 回復(fù)
  9. 坐等更新

    來(lái)自上海 回復(fù)
  10. 通俗易懂,這些都是作者自己在工作中自己研究的嗎,佩服佩服

    來(lái)自上海 回復(fù)
  11. 點(diǎn)個(gè)贊,寫得不錯(cuò),對(duì)于我這樣的小白也比較好懂!

    來(lái)自湖北 回復(fù)
  12. 沒(méi)得人評(píng)論呢

    回復(fù)