- OAuth 2實(shí)戰(zhàn)寶典
- 糜鵬程編著
- 10字
- 2024-01-18 11:43:20
1.2 OAuth 2的四種授權(quán)模式
1.2.1 隱式授權(quán)模式
1.授權(quán)請(qǐng)求示例
步驟1 隱式授權(quán)(Implicit Grant)模式引導(dǎo)用戶在登錄頁(yè)面登錄,在用戶登錄成功后,通過授權(quán)系統(tǒng)將用戶的授權(quán)信息回調(diào)到第三方應(yīng)用,在第三方應(yīng)用拿到授權(quán)信息后,便可調(diào)用開放能力。隱式授權(quán)請(qǐng)求如示例1.1所示。

示例1.1 隱式授權(quán)請(qǐng)求
注意
在這里統(tǒng)一說明一下,示例中使用“##”代表一個(gè)參數(shù)值,后文均遵循該規(guī)則。
示例1.1中各參數(shù)的含義如下。
? client_id:第三方應(yīng)用在開放平臺(tái)注冊(cè)完成后獲取的唯一標(biāo)識(shí)。
? redirect_url:第三方應(yīng)用在開放平臺(tái)注冊(cè)的回調(diào)地址。
? scope:第三方應(yīng)用的訪問權(quán)限,一般由逗號(hào)分隔的多個(gè)字符串組成。
? response_type:默認(rèn)值為token,即返回授權(quán)的token。
步驟2 假設(shè)第三方應(yīng)用設(shè)置的回調(diào)地址為https://example.com/callback,在第三方應(yīng)用引導(dǎo)用戶發(fā)起步驟1后,會(huì)跳轉(zhuǎn)到用戶登錄頁(yè)面。在用戶登錄成功后,授權(quán)系統(tǒng)會(huì)生成token,并通過第三方應(yīng)用預(yù)設(shè)的回調(diào)地址回調(diào)到第三方應(yīng)用。隱式授權(quán)回調(diào)請(qǐng)求如示例1.2所示。

示例1.2 隱式授權(quán)回調(diào)請(qǐng)求
示例1.2中各參數(shù)的含義如下。
? https://example.com/callback:第三方應(yīng)用預(yù)設(shè)的回調(diào)地址,授權(quán)系統(tǒng)在授權(quán)成功后,會(huì)直接回調(diào)到該地址。
? access_token:訪問令牌,用戶授權(quán)的唯一憑證,可代表用戶調(diào)用授權(quán)的開放接口。
? token_type:token的類型,一般為bearer。該類型的token是一串字符串,通常為一串十六進(jìn)制形式的字符串或JWT(一種結(jié)構(gòu)化的token表示方法)。還有一些其他類型,如POP。隨著HTTPS協(xié)議的普及和簽名的使用,基本不再使用該類型的token。
? expires_in:token的過期時(shí)間,單位為秒。
2.系統(tǒng)交互流程
下面通過如圖1-1所示的隱式授權(quán)系統(tǒng)交互圖來(lái)進(jìn)一步講解授權(quán)流程。
步驟1 用戶訪問第三方應(yīng)用。
步驟2 第三方應(yīng)用引導(dǎo)用戶向授權(quán)系統(tǒng)發(fā)起授權(quán)請(qǐng)求,詳見示例1.1。

圖1-1 隱式授權(quán)系統(tǒng)交互圖
步驟3 授權(quán)系統(tǒng)進(jìn)行初步校驗(yàn),校驗(yàn)參數(shù)是否合法,如client_id是否存在,redirect_url是否一致等。在校驗(yàn)通過后,重定向到認(rèn)證系統(tǒng),并發(fā)起用戶認(rèn)證。
步驟4 用戶在認(rèn)證系統(tǒng)中成功登錄后,會(huì)從認(rèn)證系統(tǒng)回調(diào)到授權(quán)系統(tǒng)。授權(quán)系統(tǒng)可以獲取用戶信息,在進(jìn)行必要的授權(quán)流程后,生成access_token。
步驟5 授權(quán)系統(tǒng)重定向到第三方應(yīng)用設(shè)置的回調(diào)地址,詳見示例1.2。
經(jīng)驗(yàn)
隱式授權(quán)模式安全性不高,在實(shí)際中應(yīng)用不多,原因如下。
(1)在授權(quán)系統(tǒng)回調(diào)到第三方應(yīng)用(圖1-1的步驟5)時(shí),token會(huì)直接作為參數(shù)在瀏覽器中顯示,有暴露token的風(fēng)險(xiǎn)。
(2)如果第三方應(yīng)用所設(shè)置的回調(diào)地址不是示例1.2中的https請(qǐng)求,而是普通的http請(qǐng)求,則會(huì)因?yàn)閔ttp的非加密傳輸,而帶來(lái)參數(shù)被攔截的風(fēng)險(xiǎn)。
(3)可能無(wú)法刷新token的有效期,過期后只能重新授權(quán)。
- OpenStack Cloud Computing Cookbook(Third Edition)
- Essential Angular
- 前端架構(gòu):從入門到微前端
- Java加密與解密的藝術(shù)
- Java Web開發(fā)技術(shù)教程
- KnockoutJS Starter
- Apache Mahout Clustering Designs
- PHP 7+MySQL 8動(dòng)態(tài)網(wǎng)站開發(fā)從入門到精通(視頻教學(xué)版)
- Buildbox 2.x Game Development
- Web App Testing Using Knockout.JS
- 微前端設(shè)計(jì)與實(shí)現(xiàn)
- MySQL從入門到精通
- Python Business Intelligence Cookbook
- FORTRAN程序設(shè)計(jì)權(quán)威指南
- Python從入門到項(xiàng)目實(shí)踐(超值版)