<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          你管這破玩意叫 OAuth

          共 2536字,需瀏覽 6分鐘

           ·

          2021-05-28 01:25

          低并發(fā)編程
          戰(zhàn)略上藐視技術(shù),戰(zhàn)術(shù)上重視技術(shù)

          今天,我想登陸豆瓣,看看電影評(píng)論,陶冶陶冶情操。

          但是,我從來沒注冊(cè)過豆瓣賬號(hào),而我又懶得再注冊(cè)一個(gè),怎么辦呢?

          我打開豆瓣的官網(wǎng),笑了,原來豆瓣早就為我這種懶人想到了辦法。


          懶人三步





          第一步:在豆瓣官網(wǎng)點(diǎn)擊用 QQ 登陸。

          第二步:跳轉(zhuǎn)到 qq 登錄頁面輸入用戶名密碼,然后點(diǎn)授權(quán)并登錄。

          第三步:跳回到豆瓣頁面,成功登錄。

          太方便了!

          但這短短的幾秒鐘,可不簡(jiǎn)單,我來給你說說。


          上帝視角看發(fā)生了什么





          這幾秒鐘之內(nèi)發(fā)生的事情,在外行的用戶視角看來,就是在豆瓣官網(wǎng)上輸了個(gè) qq 號(hào)和密碼就登錄成功了。

          在一些細(xì)心的用戶視角看來,頁面經(jīng)歷了從豆瓣到 qq,再?gòu)?qq 到豆瓣的兩次頁面跳轉(zhuǎn)。

          但作為一群專業(yè)的程序員,我們還應(yīng)該從上帝視角來看這個(gè)過程。

          第一步:在豆瓣官網(wǎng)點(diǎn)擊用 qq 登錄

          當(dāng)你點(diǎn)擊用 qq 登錄的小圖標(biāo)時(shí),實(shí)際上是向豆瓣的服務(wù)器發(fā)起了一個(gè)請(qǐng)求。

          http:// www.douban.com/leadToAuthorize

          豆瓣服務(wù)器會(huì)響應(yīng)一個(gè)重定向地址,指向 qq 授權(quán)登錄的頁面地址。

          http:// www.qq.com/authorize

          當(dāng)然,這個(gè)重定向地址還附帶了一個(gè)回調(diào)地址,這是在 QQ 那邊登陸成功后需要跳回的豆瓣地址。

          http://www.qq.com/authorize?
          callback=www.douban.com/callback

          這跳回的地址是必然的嘛,不然 QQ 怎么知道在我這邊登陸成功后我要干嘛,上桿子找人家 QQ 授權(quán)的網(wǎng)站那么多。

          這部分的流程是黃色的這部分。

          第二步:跳轉(zhuǎn)到 qq 登錄頁面輸入用戶名密碼,然后點(diǎn)授權(quán)并登錄

          上一步,瀏覽器接到重定向地址

          http://www.qq.com/authorize?
          callback=www.douban.com/callback

          自然沒什么好說的,乖乖訪問過去。

          這回訪問的就是 QQ 的頁面了。

          用戶輸入 QQ 號(hào)和密碼,點(diǎn)擊授權(quán)并登陸,這里走 QQ 服務(wù)器自己的校驗(yàn)邏輯,與豆瓣毫無關(guān)系。

          若校驗(yàn)成功,會(huì)響應(yīng)給瀏覽器一個(gè)重定向地址

          www.douban.com/callback

          沒錯(cuò),就是上一步傳給 QQ 服務(wù)器的 callback 參數(shù)!

          但除了這個(gè)地址外,還附上了一個(gè) code,我們叫它授權(quán)碼

          www.douban.com/callback?code=xxx

          這個(gè) code 是豆瓣服務(wù)唯一關(guān)心的事情,至于你那邊如何校驗(yàn)用戶,無所謂,只要最終能給我一個(gè) code 碼,我就認(rèn)為這個(gè)用戶在你那里登陸成功了。

          這部分的流程是黃色的這部分。

          第三步:跳回到豆瓣頁面,成功登錄

          這一步背后的過程其實(shí)是最繁瑣的,但對(duì)于用戶來說是完全感知不到的。

          用戶在 QQ 登錄頁面點(diǎn)擊授權(quán)登陸后,就直接跳轉(zhuǎn)到豆瓣首頁了,但其實(shí)經(jīng)歷了很多隱藏的過程。

          首先接上一步,QQ 服務(wù)器在判斷登錄成功后,使頁面重定向到之前豆瓣發(fā)來的 callback 并附上 code 授權(quán)碼。

          www.douban.com/callback?code=xxx

          瀏覽器接到重定向,乖乖發(fā)起請(qǐng)求,此時(shí)請(qǐng)求的是豆瓣服務(wù)器

          豆瓣服務(wù)器收到請(qǐng)求后,對(duì) QQ 服務(wù)器發(fā)起了兩次請(qǐng)求:

          1. 用拿到的 code 去換 token
          2. 再用拿到的 token 換取用戶信息

          這個(gè) code 和 token 都是有失效時(shí)間的,也因此保證了只要不在短時(shí)間內(nèi)泄漏出去,就不會(huì)有安全風(fēng)險(xiǎn)。

          拿到用戶信息之后,就返回給了瀏覽器。注意此時(shí)的瀏覽器上是豆瓣的首頁,豆瓣也因此可以將你的個(gè)人信息展示出來。

          這部分的流程是黃色的這部分。

          至此,整個(gè)過程結(jié)束。

          這個(gè)破玩意,就叫做 OAuth 2.0 協(xié)議

          這個(gè)流程目的是讓大家從全局了解 oauth2.0 協(xié)議實(shí)際上發(fā)生了什么,并僅僅以 oauth 的其中一種模式,授權(quán)碼模式進(jìn)行講解。

          如想了解更多模式,以及每次的請(qǐng)求和響應(yīng)的標(biāo)準(zhǔn)齊全的參數(shù),推薦讀一下阮一峰的文章。

          http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html


          為啥要這么跳來跳去





          為什么,要這么麻煩呢?跳來跳去的。

          其實(shí)之所以有這個(gè)協(xié)議,我總結(jié)起來有兩點(diǎn)原因:

          懶 + 不信任

          是指用戶懶。

          如果用戶不那么懶,直接在豆瓣上新注冊(cè)一個(gè)賬號(hào)就好了。

          不信任是什么意思呢?

          如果用戶信任豆瓣網(wǎng)站,那完全可以讓用戶在豆瓣網(wǎng)站輸入 QQ 的用戶名和密碼,由豆瓣傳給 QQ 服務(wù)器做校驗(yàn),并返回用戶信息。

          但這是不可能的,你愿意把你的 QQ 號(hào)和密碼給豆瓣看到?

          更甚者,如果 QQ 信任豆瓣,用戶也信任豆瓣,那 QQ 也可以把自己的數(shù)據(jù)庫直接拷貝給豆瓣,然后豆瓣就可以完全自己擁有一套 QQ 用戶數(shù)據(jù)了,也就可以讓用戶使用 QQ 登錄。

          當(dāng)然,這也是不可能的。

          所以就有了 OAuth 這種協(xié)議,你進(jìn)行第三方授權(quán)時(shí)(文中的QQ),用戶名和密碼是不經(jīng)過目標(biāo)服務(wù)器的(文中的豆瓣),這保證了授權(quán)的安全性

          第三方授權(quán)服務(wù)器只給目標(biāo)服務(wù)器返回有時(shí)效性的 code 和 token,目標(biāo)服務(wù)器通過這個(gè)去第三方資源服務(wù)器,換取用戶信息,這達(dá)成了拿到用戶信息的目的。

          所以總的來說,oauth 協(xié)議,就是由于三者(用戶、目標(biāo)、第三方)相互不信任,又想使用第三方服務(wù)器的授權(quán)功能,以及獲取第三方服務(wù)器存儲(chǔ)的用戶信息,而產(chǎn)生的一個(gè)辦法。

          這個(gè)破玩意,就叫做 OAuth 2.0 協(xié)議

          哦,上面好像說過了。


          禮物



          了解了上述過程后,代碼自然就不難寫了。

          這里我實(shí)現(xiàn)了一個(gè)極簡(jiǎn)版的 oauth2.0 用于體驗(yàn)這個(gè)過程,大家可以參考下。

          項(xiàng)目結(jié)構(gòu)非常簡(jiǎn)單,只有兩個(gè)模塊,分別是豆瓣和QQ,分別啟動(dòng)即可。

          最終效果也非常簡(jiǎn)單清晰,下面請(qǐng)忍受 low 逼的顯示效果

          第一步,登陸豆瓣頁面。

          第二步,使用 QQ 頁面進(jìn)行授權(quán)。

          第三步,授權(quán)成功跳回豆瓣首頁。

          想獲得這份源碼的同學(xué),加我好友看我朋友圈第一條即可,加好友方式見公眾號(hào)菜單欄喲。

          瀏覽 45
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日韩无码 波多野结衣 | 国产成人摸屄操屄熟 | 东京热一区二区 | 日韩高清无码三级片 | 韩国日本三级片网站 |