andpods授权码订单号分享_微信OAuth2授权登录
前言
第三方登錄是應(yīng)用開(kāi)發(fā)中的常用功能,通過(guò)第三方登錄,我們可以更加容易使用戶登錄我們的應(yīng)用或者網(wǎng)站。
很多網(wǎng)站都提供了第三方登錄的功能,在他們的官網(wǎng)中,都提供了如何接入第三方登錄的文檔。但是,假如不同的網(wǎng)站文檔差別極大,那么對(duì)于不了解第三方登錄的新手來(lái)說(shuō),實(shí)現(xiàn)一個(gè)支持多網(wǎng)站第三方登錄的功能可以說(shuō)是極其痛苦。
實(shí)際上,大多數(shù)網(wǎng)站提供的第三方登錄都遵循OAuth協(xié)議,雖然大多數(shù)網(wǎng)站的細(xì)節(jié)處理都是不一致的,甚至?xí)贠Auth協(xié)議進(jìn)行擴(kuò)展,但大體上其流程是一定的。
本篇文章以微信網(wǎng)頁(yè)授權(quán)來(lái)介紹OAuth2.0中最經(jīng)典最常用的一種授權(quán)模式:授權(quán)碼模式
OAuth是什么?
OAuth(開(kāi)放授權(quán))是一個(gè)開(kāi)放標(biāo)準(zhǔn),允許用戶讓第三方應(yīng)用訪問(wèn)該用戶在某一網(wǎng)站上存儲(chǔ)的私密的資源(如照片,視頻,聯(lián)系人列表),而無(wú)需將用戶名和密碼提供給第三方應(yīng)用。
允許用戶提供一個(gè)令牌,而不是用戶名和密碼來(lái)訪問(wèn)他們存放在特定服務(wù)提供者的數(shù)據(jù)。每一個(gè)令牌授權(quán)一個(gè)特定的網(wǎng)站(例如,視頻編輯網(wǎng)站)在特定的時(shí)段(例如,接下來(lái)的2小時(shí)內(nèi))內(nèi)訪問(wèn)特定的資源(例如僅僅是某一相冊(cè)中的視頻)。這樣,OAuth允許用戶授權(quán)第三方網(wǎng)站訪問(wèn)他們存儲(chǔ)在另外的服務(wù)提供者上的信息,而不需要分享他們的訪問(wèn)許可或他們數(shù)據(jù)的所有內(nèi)容。
OAuth2.0官方文檔為:https://tools.ietf.org/html/rfc6749
為什么是OAuth2.0呢?其實(shí)是有1和1.1版本的,只是因?yàn)?和1.1版本流程比較復(fù)雜,應(yīng)用不是很廣泛。
授權(quán)碼模式流程
授權(quán)碼模式(authorization code)是功能最完整、流程最嚴(yán)密的授權(quán)模式。它的特點(diǎn)就是通過(guò)客戶端的后臺(tái)服務(wù)器,與 "服務(wù)提供商" 的認(rèn)證服務(wù)器進(jìn)行互動(dòng)。
整體大致過(guò)程如下:
OAuth2.0應(yīng)用場(chǎng)景
我們這里主要模擬在微信公眾號(hào)中使用OAuth2.0進(jìn)行授權(quán),獲取用戶的基本信息的過(guò)程。
第1步:引導(dǎo)用戶進(jìn)行授權(quán):
當(dāng)用戶希望使用第三方登錄進(jìn)行登錄時(shí),第三方應(yīng)用會(huì)通過(guò)類似下圖的方式將用戶引導(dǎo)至授權(quán)頁(yè)面URL。
登錄方式如:需要獲取微信用戶信息時(shí),需要引導(dǎo)用戶點(diǎn)擊請(qǐng)求如下授權(quán)頁(yè)面URL。
//open.weixin.qq.com/請(qǐng)求參數(shù)詳細(xì)介紹如下
| appid | 是 | 公眾號(hào)的唯一標(biāo)識(shí) |
| redirect_uri | 是 | 授權(quán)后重定向的回調(diào)鏈接地址, 請(qǐng)使用 urlEncode 對(duì)鏈接進(jìn)行處理 |
| response_type | 是 | 返回類型,只能填寫(xiě)code |
| scope | 是 | 應(yīng)用授權(quán)作用域 snsapi_base (不彈出授權(quán)頁(yè)面,直接跳轉(zhuǎn),只能獲取用戶openid) snsapi_userinfo (彈出授權(quán)頁(yè)面,可通過(guò)openid拿到昵稱、性別、所在地等。并且即使在未關(guān)注的情況下,只要用戶授權(quán),也能獲取其信息 ) |
| state | 否 | 重定向后會(huì)帶上state參數(shù),開(kāi)發(fā)者可以填寫(xiě)a-zA-Z0-9的參數(shù)值,最多128字節(jié) |
| #wechat_redirect | 是 | 無(wú)論直接打開(kāi)還是做頁(yè)面302重定向時(shí)候,必須帶此參數(shù) |
第2步:用戶授權(quán)
當(dāng)我們點(diǎn)擊授權(quán)頁(yè)面URL時(shí),會(huì)出現(xiàn)以下授權(quán)頁(yè)面
微信授權(quán)頁(yè)面該頁(yè)面由認(rèn)證服務(wù)器提供,認(rèn)證服務(wù)器會(huì)告訴用戶該第三方在認(rèn)證服務(wù)器中提交的相關(guān)信息,以及授權(quán)后第三方應(yīng)用能夠獲取哪些資源。在微信中,最基礎(chǔ)的認(rèn)證可以訪問(wèn)用戶的公共信息。
第3步:返回用戶授權(quán)碼(Code)
當(dāng)用戶同意授權(quán)后,認(rèn)證服務(wù)器將生成一個(gè)用戶授權(quán)碼(Code),此時(shí)認(rèn)證服務(wù)器如何將用戶授權(quán)碼(Code)傳遞給第三方應(yīng)用呢?
當(dāng)我們向認(rèn)證服務(wù)器提交應(yīng)用信息時(shí),通常需要填寫(xiě)一個(gè)redirect_uri,在微信公眾號(hào)的接口權(quán)限中
點(diǎn)擊修改(授權(quán)回調(diào)域名配置規(guī)范為全域名并且不帶http)
服務(wù)器中填寫(xiě)回調(diào)域名在第1步中,當(dāng)我們引導(dǎo)用戶進(jìn)入授權(quán)頁(yè)面時(shí),也會(huì)附帶一個(gè)redirect_uri的信息。當(dāng)認(rèn)證服務(wù)器驗(yàn)證兩個(gè)域名一致或在該域名的子域名下,便會(huì)通知瀏覽器跳轉(zhuǎn)到redirect_uri,同時(shí)會(huì)在后面附加用戶授權(quán)碼(code)的相關(guān)信息。授權(quán)后訪問(wèn)的redirect_uri如下:
//xxx.com/oauth2?code=0217LHck2XfL3D0sbVfk2cFIck27LHcB&state=注意:code作為換取access_token的票據(jù),每次用戶授權(quán)帶上的code將不一樣,code只能使用一次,5分鐘未被使用自動(dòng)過(guò)期。
第4步:換取網(wǎng)頁(yè)授權(quán)access_token
要拿到認(rèn)證服務(wù)器的授權(quán),大致都需要以下幾個(gè)信息:
client_id 標(biāo)識(shí)第三方應(yīng)用的id,由認(rèn)證服務(wù)器(微信)在第三方應(yīng)用提交時(shí)頒發(fā)給第三方應(yīng)用
client_secret 第三方應(yīng)用和認(rèn)證服務(wù)器之間的安全憑證,由認(rèn)證服務(wù)器(微信)在第三方應(yīng)用提交時(shí)頒發(fā)的
code 第3步中認(rèn)證服務(wù)器返回的授權(quán)碼
state 由開(kāi)發(fā)者給出的隨機(jī)碼,可選項(xiàng)
在微信中請(qǐng)求方法為
https:/當(dāng)認(rèn)證服務(wù)器拿到上述中的所有信息,驗(yàn)證通過(guò)后,會(huì)將access_token返回給第三方應(yīng)用。
注意:由于微信公眾號(hào)的secret和獲取到的access_token安全級(jí)別都非常高,必須只保存在服務(wù)器,不允許傳給客戶端。后續(xù)刷新access_token、通過(guò)access_token獲取用戶信息等步驟,也必須從服務(wù)器發(fā)起。
第5步:請(qǐng)求訪問(wèn)用戶資源
拿到網(wǎng)頁(yè)授權(quán)驗(yàn)證憑證(access_token)后,剩下的事情就很簡(jiǎn)單了,資源服務(wù)器會(huì)提供一系列關(guān)于用戶資源的API,拿驗(yàn)證憑證(access_token)訪問(wèn)相應(yīng)的API即可。
例如,在微信中,通過(guò)網(wǎng)頁(yè)授權(quán)access_token、openid獲取用戶信息的請(qǐng)求方法:
//api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID如果網(wǎng)頁(yè)授權(quán)驗(yàn)證憑證(access_token)是正確的,此時(shí)資源服務(wù)器就會(huì)返回資源信息,此時(shí)整個(gè)OAuth2流程就結(jié)束了。
注:本文為Yolo原創(chuàng),未經(jīng)許可不得在任何平臺(tái)轉(zhuǎn)載,侵權(quán)必究。如需轉(zhuǎn)載,可關(guān)注微信公眾號(hào):技術(shù)訓(xùn)練營(yíng),在后臺(tái)留言,與作者聯(lián)系,取得許可才能轉(zhuǎn)載~
微信掃一掃,發(fā)現(xiàn)更精彩。
總結(jié)
以上是生活随笔為你收集整理的andpods授权码订单号分享_微信OAuth2授权登录的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: k8s挂载目录_K8S中挂载目录引发的血
- 下一篇: 用计算机打cf,CF能用的特殊符号有什么