OAuth3.0是什么

OAuth的英文全稱是Open Authorization,它是一種開放授權(quán)協(xié)議。OAuth目前共有2個版本,2007年12月的1.0版(之后有一個修正版1.0a)和2010年4月的2.0版,1.0版本存在嚴(yán)重安全漏洞,而2.0版解決了該問題。
OAuth簡單說就是一種授權(quán)的協(xié)議,只要授權(quán)方和被授權(quán)方遵守這個協(xié)議去寫代碼提供服務(wù),那雙方就是實現(xiàn)了OAuth模式。
OAuth3.0實現(xiàn)第三方登錄的流程
例如你想登錄豆瓣去看看電影評論,但你丫的從來沒注冊過豆瓣賬號,又不想新注冊一個再使用豆瓣,怎么辦呢?不用擔(dān)心,豆瓣已經(jīng)為你這種懶人做了準(zhǔn)備,用你的qq號可以授權(quán)給豆瓣進(jìn)行登錄。流程如下:
第一步:在豆瓣官網(wǎng)點擊用qq登錄
當(dāng)你點擊用qq登錄的小圖標(biāo)時,實際上是向豆瓣的服務(wù)器發(fā)起了一個 http://www.douban.com/leadToAuthorize 的請求,豆瓣服務(wù)器會響應(yīng)一個重定向地址,指向qq授權(quán)登錄。
瀏覽器接到重定向地址 http://www.qq.com/authorize?callback=www.douban.com/callback ,再次訪問。并注意到這次訪問帶了一個參數(shù)是callback,以便qq那邊授權(quán)成功再次讓瀏覽器發(fā)起這個callback請求。不然qq怎么知道你讓我授權(quán)后要返回那個頁面啊,每天讓我授權(quán)的像豆瓣這樣的網(wǎng)站這么多。
第二步:跳轉(zhuǎn)到qq登錄頁面輸入用戶名密碼,然后點授權(quán)并登錄
qq的服務(wù)器接收到了豆瓣訪問的authorize,在此例中所給出的回應(yīng)是跳轉(zhuǎn)到qq的登錄頁面,用戶輸入賬號密碼點擊授權(quán)并登錄按鈕后,一定還會訪問qq服務(wù)器中校驗用戶名密碼的方法,若校驗成功,該方法會響應(yīng)瀏覽器一個重定向地址,并附上一個code(授權(quán)碼)。由于豆瓣只關(guān)心像qq發(fā)起authorize請求后會返回一個code,并不關(guān)心qq是如何校驗用戶的,并且這個過程每個授權(quán)服務(wù)器可能會做些個性化的處理,只要最終的結(jié)果是返回給瀏覽器一個重定向并附上code即可。
第三步:跳回到豆瓣頁面,成功登錄
這一步背后的過程其實是最繁瑣的,但對于用戶來說是完全感知不到的。用戶在QQ登錄頁面點擊授權(quán)登陸后,就直接跳轉(zhuǎn)到豆瓣首頁了,但其實經(jīng)歷了很多隱藏的過程。
首先接上一步,QQ服務(wù)器在判斷登錄成功后,使頁面重定向到之前豆瓣發(fā)來的callback并附上code授權(quán)碼,即 callback=www.douban.com/callback 。
頁面接到重定向,發(fā)起 http://www.douban.com/callback 請求。
豆瓣服務(wù)器收到請求后,做了兩件再次與QQ溝通的事,即模擬瀏覽器發(fā)起了兩次請求。
一個是用拿到的code去換token,另一個就是用拿到的token換取用戶信息。最后將用戶信息儲存起來,返回給瀏覽器其首頁的視圖。到此OAuth3.0授權(quán)結(jié)束。
使用微博進(jìn)行第三方登錄
根據(jù)微博的接口寫的微博登錄的一個demo
#第一步生成一個網(wǎng)頁地址,訪問后是微博第三方登錄的頁面,登錄會返回一個code(授權(quán)碼)
def get_auth_url():
"""
client_id 必填 string 申請應(yīng)用時分配的App Key。
redirect_uri 必填 string 授權(quán)回調(diào)地址,站外應(yīng)用需與設(shè)置的回調(diào)地址一致。
"""
weibo_auth_url = 'https://api.weibo.com/oauth3/authorize'
redirect_uri = "http://127.0.0.1:8000/complete/weibo/"
client_id = '29447*****'
auth_url = weibo_auth_url + "?client_id={client_id}&redirect_uri={re_url}".format(client_id=client_id,re_url=redirect_uri)
print(auth_url)
#第二步 拿著這個code(授權(quán)碼)去獲得access_token
#第二步運行得到的結(jié)果
#'{"access_token":"***********c62892e8c6shqQsB","remind_in":"157679999","expires_in":157679999,"uid":"5020302235","isRealName":"true"}'
def get_access_token(code):
access_token_url = "https://api.weibo.com/oauth3/access_token"
import requests
re_dict = requests.post(access_token_url, data={
"client_id": "29447*****",
# App Secret
"client_secret": "3500dfe8e580c20dfec9828*********",
"grant_type": "authorization_code",
"code": code,
"redirect_uri": "http://127.0.0.1:8000/complete/weibo/",
})
pass
# 第三步 拿到access_token后就可以獲得這個用戶的信息了
def get_user_info(access_token):
user_url = "https://api.weibo.com/2/users/show.json"
uid = "5020302235"
get_url = user_url+"?access_token={at}&uid={uid}".format(at=access_token,uid=uid)
print(get_url)
if __name__ == '__main__':
# get_auth_url()
# get_access_token(code='cef2817996ed1c8f65cebbd69d6378a3')
get_user_info(access_token='**********2892e8c6shqQsB')另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
網(wǎng)頁名稱:Django中使用第三方登錄的示例代碼-創(chuàng)新互聯(lián)
當(dāng)前地址:http://www.chinadenli.net/article2/djdioc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動網(wǎng)站建設(shè)、商城網(wǎng)站、品牌網(wǎng)站制作、外貿(mào)建站、網(wǎng)站改版、建站公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容