官术网_书友最值得收藏!

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)。

主站蜘蛛池模板: 阿克苏市| 六枝特区| 万盛区| 桃园市| 虞城县| 自贡市| 中西区| 乾安县| 象州县| 泸水县| 丰原市| 桑日县| 乌兰察布市| 江孜县| 新邵县| 临湘市| 闸北区| 昆山市| 金寨县| 柘城县| 台南市| 贵阳市| 濮阳市| 东乌珠穆沁旗| 焦作市| 容城县| 如东县| 万年县| 工布江达县| 清镇市| 县级市| 石景山区| 屏南县| 方城县| 长子县| 新泰市| 荃湾区| 吴江市| 兴宁市| 隆林| 焦作市|