OAuth2.0從入門到出道

什么是OAuth2
OAuth2的幾種不同的“角色”
資源擁有者:掘金的用戶 第三方軟件:掘金(有些文章叫做客戶端) 授權(quán)服務(wù):微信開(kāi)放平臺(tái)的授權(quán)服務(wù) 受保護(hù)的資源:微信頭像、微信其他信息
OAuth2的幾種類型
授權(quán)碼憑據(jù)許可 資源擁有者憑據(jù)許可(賬號(hào)密碼類型) 客戶端憑據(jù)許可 隱式許可(簡(jiǎn)單類型)
授權(quán)碼憑據(jù)許可
官方流程

掘金登錄流程
用戶打開(kāi)掘金 用戶點(diǎn)擊登錄(微信登錄) 界面跳轉(zhuǎn)到微信掃碼頁(yè)面 用戶掃碼登錄 用戶授權(quán)并同意 登錄成功,頁(yè)面跳轉(zhuǎn)回掘金
掘金登錄詳細(xì)流程
用戶打開(kāi)瀏覽器,打開(kāi)掘金 用戶點(diǎn)擊登錄 頁(yè)面跳轉(zhuǎn)到微信掃碼頁(yè)面 微信授權(quán)服務(wù)校驗(yàn)掘金的請(qǐng)求信息 用戶用微信掃碼 用戶用微信授權(quán)并同意 微信授權(quán)服務(wù)校驗(yàn)用戶信息 頁(yè)面跳轉(zhuǎn)到掘金前端頁(yè)面并附帶上授權(quán)碼 掘金前端用授權(quán)碼請(qǐng)求掘金后端 掘金后端調(diào)用微信的OpenApi請(qǐng)求訪問(wèn)令牌 微信授權(quán)服務(wù)校驗(yàn)授權(quán)碼及掘金的請(qǐng)求信息,并響應(yīng)訪問(wèn)令牌 掘金后端拿到訪問(wèn)令牌,并通過(guò)訪問(wèn)令牌獲取用戶信息(用戶唯一ID、微信頭像,用戶名等) 掘金后端記錄用戶登錄 掘金后端響應(yīng)前端用戶登錄成功 掘金前端給用戶展示登錄成功頁(yè)面
我們需要重點(diǎn)關(guān)注的幾個(gè)步驟
第三點(diǎn)與第四點(diǎn)(跳轉(zhuǎn)到微信掃碼登錄頁(yè))
當(dāng)我們從掘金跳轉(zhuǎn)到微信掃碼頁(yè)面的時(shí)候,我們可以觀察下微信掃碼頁(yè)面的URL https://open.weixin.qq.com/connect/qrconnect?appid=wx1f78f78832fc2c16&redirect_uri=https%3A%2F%2Fjuejin.im%2Fpassport%2Fauth%2Flogin_success&response_type=code&scope=snsapi_login&state=0d26ae7d3gASoVCgoVPZIDU5OTlkODY2ZDg1MTA1YmJkYjhjOTY4NzI4Y2VkMzYzoU6-aHR0cHM6Ly9qdWVqaW4uaW0vb2F1dGgtcmVzdWx0oVYBoUkAoUQAoUHRCjChTdEKMKFIqWp1ZWppbi5pbaFSBKJQTNEDQaZBQ1RJT06goUyyaHR0cHM6Ly9qdWVqaW4uaW0voVTZIDJjNzMzMWI5YzdkMzk5MzljYjYyYjdiODllOTJlNDZioVcAoUYAolNBAKFVww%253D%253D#wechat_redirect
appid:appId,第三方的唯一標(biāo)識(shí) redirect_uri:授權(quán)成功后的跳轉(zhuǎn)URL scope:權(quán)限范圍
appId是否正確(你不能隨便瞎傳一個(gè)appId,否則微信怎么知道是否是合法的第三方呢?) 根據(jù)appId校驗(yàn)授權(quán)成功后的跳轉(zhuǎn)URL是否正確(如果跳轉(zhuǎn)的URL不是注冊(cè)時(shí)填寫(xiě)的URL,是不被允許的) 根據(jù)appId校驗(yàn)第三方的權(quán)限范圍是否正確(第三方本次授權(quán)的權(quán)限范圍不能超過(guò)它申請(qǐng)時(shí)的范圍。比如申請(qǐng)時(shí)只需要查詢用戶信息,但是本次授權(quán)卻需要查詢用戶好友列表,這肯定是不被微信允許的)
第七點(diǎn)(校驗(yàn)用戶授權(quán)信息)
當(dāng)用戶用微信授權(quán)并同意的時(shí),這時(shí)用戶會(huì)提交授權(quán)同意信息給微信授權(quán)服務(wù)。這時(shí),微信授權(quán)服務(wù)主要做三個(gè)任務(wù): 驗(yàn)證權(quán)限范圍:第三方軟件可能需要用戶個(gè)人信息、用戶好友列表、用戶所在地等權(quán)限信息,但是作為用戶為了保護(hù)自己的隱私,不一定會(huì)把全部的信息給到第三方,用戶可以自由選擇哪些允許授權(quán)。 生成授權(quán)碼:當(dāng)用戶同意授權(quán)后,微信授權(quán)服務(wù)會(huì)為本次授權(quán)生成授權(quán)碼。 重定向至第三方URL:微信授權(quán)服務(wù)授權(quán)碼成功后,需要告知第三方軟件,它要通過(guò)跳轉(zhuǎn)到第三方的URL上。 第八點(diǎn)(授權(quán)碼)
授權(quán)碼是一個(gè)非常關(guān)鍵的信息,它用于后續(xù)與appSecret配合,獲取訪問(wèn)令牌。關(guān)于授權(quán)碼,我們要知道的是: 這里授權(quán)碼生命周期設(shè)計(jì)的如此短,而且它是一次性的,主要是為了安全。因?yàn)槭跈?quán)碼是微信通過(guò)重定向跳轉(zhuǎn)到第三方URL上的,所以授權(quán)碼是直接暴露在外的。 授權(quán)碼是一次性的,用了一次之后,微信會(huì)把它作廢,后續(xù)想要使用,必須使用新的授權(quán)碼。 授權(quán)碼是有時(shí)間限制的,而且這個(gè)時(shí)間是非常短的,官方推薦是10分鐘以內(nèi),而大部分授權(quán)平臺(tái)授權(quán)碼的有效時(shí)間一般是3~5分鐘。 第十點(diǎn)(訪問(wèn)令牌)
掘金想要訪問(wèn)到用戶的資源,最終還是要通過(guò)訪問(wèn)令牌去請(qǐng)求用戶的資源。授權(quán)碼其實(shí)只是一個(gè)臨時(shí)的通行證。獲取訪問(wèn)令牌有三個(gè)關(guān)鍵參數(shù): 微信根據(jù)上述三個(gè)參數(shù),校驗(yàn)第三方是否存在,appSecret是否正確,授權(quán)碼是否正確來(lái)生成訪問(wèn)令牌。 至于訪問(wèn)令牌的種類,不同的軟件授權(quán)服務(wù)有不同的規(guī)則,它可以是一串UUID,也可以是JWT,我們?nèi)粘J褂玫膖oken都適合的。只不過(guò)大家要注意的是,OAuth2和JWT其實(shí)并沒(méi)有絕對(duì)依賴的關(guān)系,不要一開(kāi)始就把二者混為一談,否則后續(xù)很容易讓自己云里霧里。當(dāng)掘金拿到訪問(wèn)令牌后,就可以訪問(wèn)用戶資源接口,獲取用戶信息了。 其實(shí)很多人不理解,為什么要弄一個(gè)授權(quán)碼還弄一個(gè)訪問(wèn)令牌呢?直接一步到位不就好了嗎? 我們仔細(xì)看看時(shí)序圖,授權(quán)碼是微信通過(guò)瀏覽器的URL重定向告訴掘金的,所以基本上沒(méi)啥安全性可言,大家都能知道它; 而訪問(wèn)令牌則是掘金的后端服務(wù)器直接與微信授權(quán)服務(wù)通信,獲取到的,因此它的安全性是比較好的。 另外,有些軟件授權(quán)服務(wù)不僅僅會(huì)返回訪問(wèn)令牌(accessToken),還會(huì)返回一個(gè)刷新令牌(refreshToken)。刷新令牌的作用其實(shí)和授權(quán)碼很相似,就是通過(guò)刷新令牌獲取訪問(wèn)令牌,而且訪問(wèn)令牌也是一次性的,也有有效期,只不過(guò)它的有效期會(huì)相對(duì)比較久,有些軟件的刷新令牌有效期是一周。 為什么有這個(gè)刷新令牌呢?因?yàn)樵L問(wèn)令牌是有有效期的。假設(shè)沒(méi)有刷新令牌,當(dāng)訪問(wèn)令牌過(guò)期后,如果第三方軟件還要繼續(xù)獲取用戶資源信息,那么只有一個(gè)辦法了:告訴用戶訪問(wèn)令牌過(guò)期,讓用戶重新走一遍訪問(wèn)令牌申請(qǐng)流程。毫無(wú)疑問(wèn),這個(gè)用戶體驗(yàn)是非常差的。而如果有刷新令牌,那么第三方軟件可以再訪問(wèn)令牌過(guò)期前,在后端靜默的申請(qǐng)一個(gè)新的訪問(wèn)令牌,而整個(gè)流程是用戶無(wú)感知的。 大廠獲取accessToken的時(shí)序圖
微信授權(quán)接入文檔 微信
appId:用戶的唯一標(biāo)識(shí),微信授權(quán)服務(wù)需要校驗(yàn)第三方是否存在 appSecret:還記得上述我們說(shuō)過(guò),掘金需要去微信開(kāi)放平臺(tái)注冊(cè)時(shí)的申請(qǐng)的appSecret嗎?就是在這里用上了。 授權(quán)碼:第八點(diǎn)生成的授權(quán)碼

支付寶

資源擁有者憑據(jù)許可(賬號(hào)密碼類型)
客戶端憑據(jù)許可
隱式許可(簡(jiǎn)單類型)

評(píng)論
圖片
表情
