溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

OAuth 2.0 概念及授權(quán)流程梳理

發(fā)布時(shí)間:2020-09-29 02:24:10 來(lái)源:腳本之家 閱讀:202 作者:東北小狐貍 欄目:開(kāi)發(fā)技術(shù)

OAuth3 的概念

OAuth是一個(gè)關(guān)于授權(quán)的開(kāi)放網(wǎng)絡(luò)標(biāo)準(zhǔn),OAuth3是其2.0版本。

它規(guī)定了四種操作流程(授權(quán)模式)來(lái)確保安全

應(yīng)用場(chǎng)景有第三方應(yīng)用的接入、微服務(wù)鑒權(quán)互信、接入第三方平臺(tái)、第一方密碼登錄等

Java王國(guó)中Spring Security也對(duì)OAuth3標(biāo)準(zhǔn)進(jìn)行了實(shí)現(xiàn)。

OAuth3授權(quán)模式

OAuth3定義了四種授權(quán)模式(授權(quán)流程)來(lái)對(duì)資源的訪(fǎng)問(wèn)進(jìn)行控制

  • 授權(quán)碼模式(Authorization Code Grant)
  • 隱式授權(quán)模式(Implicit Grant)
  • 用戶(hù)名密碼模式(Resource Owner Password Credentials Grant)
  • 客戶(hù)端模式(Client Credentials Grant)

無(wú)論哪個(gè)模式(流程)都擁有三個(gè)必要角色:客戶(hù)端、授權(quán)服務(wù)器、資源服務(wù)器,有的還有用戶(hù)(資源擁有者),下面簡(jiǎn)單介紹下授權(quán)流程

授權(quán)碼模式(Authorization Code Grant)

授權(quán)碼模式是OAuth3目前最安全最復(fù)雜的授權(quán)流程,先放一張圖,稍做解釋

OAuth 2.0 概念及授權(quán)流程梳理

如上圖,我們可以看到此流程可大致分為三大部分

  • Client Side:用戶(hù)+客戶(hù)端與授權(quán)服務(wù)器的交互
  • Server Side:客戶(hù)端與授權(quán)服務(wù)器之間的交互
  • Check Access Token:客戶(hù)端與資源服務(wù)器之間的交互 + 資源服務(wù)器與授權(quán)服務(wù)器之間的交互

整體上來(lái)說(shuō),可以用一句話(huà)概括授權(quán)碼模式授權(quán)流程

客戶(hù)端換取授權(quán)碼,客戶(hù)端使用授權(quán)碼換token,客戶(hù)端使用token訪(fǎng)問(wèn)資源

接下來(lái)對(duì)這三部分進(jìn)行一些說(shuō)明 :

前提條件:

  • 第三方客戶(hù)端需要提前與資源擁有方(同時(shí)也是授權(quán)所有方)協(xié)商客戶(hù)端id(client_id),客戶(hù)端密鑰(client_secret)
  • 文中暫時(shí)未將scope、state等依賴(lài)具體框架的內(nèi)容寫(xiě)進(jìn)來(lái),這里可以參考Spring Security OAuth3的實(shí)現(xiàn)

Client Side

客戶(hù)端換取授權(quán)碼

這個(gè)客戶(hù)端可以是瀏覽器,

  • 客戶(hù)端將client_id + client_secret + 授權(quán)模式標(biāo)識(shí)(grant_type) + 回調(diào)地址(redirect_uri)拼成url訪(fǎng)問(wèn)授權(quán)服務(wù)器授權(quán)端點(diǎn)
  • 授權(quán)服務(wù)器返回登錄界面,要求用戶(hù)登錄(此時(shí)用戶(hù)提交的密碼等直接發(fā)到授權(quán)服務(wù)器,進(jìn)行校驗(yàn))
  • 授權(quán)服務(wù)器返回授權(quán)審批界面,用戶(hù)授權(quán)完成
  • 授權(quán)服務(wù)器返回授權(quán)碼到回調(diào)地址

Server Side

客戶(hù)端使用授權(quán)碼換token

  • 客戶(hù)端接收到授權(quán)碼,并使用授權(quán)碼 + client_id + client_secret訪(fǎng)問(wèn)授權(quán)服務(wù)器頒發(fā)token端點(diǎn)
  • 授權(quán)服務(wù)器校驗(yàn)通過(guò),頒發(fā)token返回給客戶(hù)端
  • 客戶(hù)端保存token到存儲(chǔ)器(推薦cookie)

Check Access Token

客戶(hù)端使用token訪(fǎng)問(wèn)資源

  • 客戶(hù)端在請(qǐng)求頭中添加token,訪(fǎng)問(wèn)資源服務(wù)器
  • 資源服務(wù)器收到請(qǐng)求,先調(diào)用校驗(yàn)token的方法(可以是遠(yuǎn)程調(diào)用授權(quán)服務(wù)器校驗(yàn)端點(diǎn),也可以直接訪(fǎng)問(wèn)授權(quán)存儲(chǔ)器手動(dòng)校對(duì))
  • 資源服務(wù)器校驗(yàn)成功,返回資源

這里的說(shuō)明省去了一些參數(shù),如scope(請(qǐng)求token的作用域)、state(用于保證請(qǐng)求不被CSRF)、redirect_uri(授權(quán)服務(wù)器回調(diào)uri),先理解概念,實(shí)現(xiàn)的時(shí)候再去要求

隱式授權(quán)模式(Implicit Grant)

OAuth 2.0 概念及授權(quán)流程梳理

隱式授權(quán)模式大致可分為兩部分:

  • Client Side:用戶(hù)+客戶(hù)端與授權(quán)服務(wù)器的交互
  • Check Access Token:客戶(hù)端與資源服務(wù)器之間的交互 + 資源服務(wù)器與授權(quán)服務(wù)器之間的交互

用一句話(huà)概括隱式授權(quán)模式授權(quán)流程

客戶(hù)端讓用戶(hù)登錄授權(quán)服務(wù)器換token,客戶(hù)端使用token訪(fǎng)問(wèn)資源

Client Side

客戶(hù)端讓用戶(hù)登錄授權(quán)服務(wù)器換token

  • 客戶(hù)端(瀏覽器或單頁(yè)應(yīng)用)將client_id + 授權(quán)模式標(biāo)識(shí)(grant_type)+ 回調(diào)地址(redirect_uri)拼成url訪(fǎng)問(wèn)授權(quán)服務(wù)器授權(quán)端點(diǎn)
  • 授權(quán)服務(wù)器跳轉(zhuǎn)用戶(hù)登錄界面,用戶(hù)登錄
  • 用戶(hù)授權(quán)
  • 授權(quán)服務(wù)器訪(fǎng)問(wèn)回調(diào)地址返回token給客戶(hù)端

Check Access Token

客戶(hù)端使用token訪(fǎng)問(wèn)資源

  • 客戶(hù)端在請(qǐng)求頭中添加token,訪(fǎng)問(wèn)資源服務(wù)器
  • 資源服務(wù)器收到請(qǐng)求,先調(diào)用校驗(yàn)token的方法(可以是遠(yuǎn)程調(diào)用授權(quán)服務(wù)器校驗(yàn)端點(diǎn),也可以直接訪(fǎng)問(wèn)授權(quán)存儲(chǔ)器手動(dòng)校對(duì))
  • 資源服務(wù)器校驗(yàn)成功,返回資源

密碼模式(Resource Owner Password Credentials Grant)

OAuth 2.0 概念及授權(quán)流程梳理

密碼模式大體上也分為兩部分:

  • Client Side: 用戶(hù)與客戶(hù)端交互,客戶(hù)端與授權(quán)服務(wù)器交互
  • Check Access Token:客戶(hù)端與資源服務(wù)器之間的交互 + 資源服務(wù)器與授權(quán)服務(wù)器之間的交互

一句話(huà)概括用戶(hù)名密碼模式流程:

用戶(hù)在客戶(hù)端提交賬號(hào)密碼換token,客戶(hù)端使用token訪(fǎng)問(wèn)資源

Client Side
用戶(hù)在客戶(hù)端提交賬號(hào)密碼換token

  • 客戶(hù)端要求用戶(hù)登錄
  • 用戶(hù)輸入密碼,客戶(hù)端將表單中添加客戶(hù)端的client_id + client_secret發(fā)送給授權(quán)服務(wù)器頒發(fā)token端點(diǎn)
  • 授權(quán)服務(wù)器校驗(yàn)用戶(hù)名、用戶(hù)密碼、client_id、client_secret,均通過(guò)返回token到客戶(hù)端
  • 客戶(hù)端保存token

Check Access Token

客戶(hù)端使用token訪(fǎng)問(wèn)資源

  • 客戶(hù)端在請(qǐng)求頭中添加token,訪(fǎng)問(wèn)資源服務(wù)器
  • 資源服務(wù)器收到請(qǐng)求,先調(diào)用校驗(yàn)token的方法(可以是遠(yuǎn)程調(diào)用授權(quán)服務(wù)器校驗(yàn)端點(diǎn),也可以直接訪(fǎng)問(wèn)授權(quán)存儲(chǔ)器手動(dòng)校對(duì))
  • 資源服務(wù)器校驗(yàn)成功,返回資源

客戶(hù)端模式(Client Credentials Grant)

OAuth 2.0 概念及授權(quán)流程梳理

客戶(hù)端模式大體上分為兩部分:

  • Server Side: 客戶(hù)端與授權(quán)服務(wù)器之間的交互
  • Check Access Token: 客戶(hù)端與資源服務(wù)器,資源服務(wù)器與授權(quán)服務(wù)器之間的交互

一句話(huà)概括客戶(hù)端模式授權(quán)流程:

客戶(hù)端使用自己的標(biāo)識(shí)換token,客戶(hù)端使用token訪(fǎng)問(wèn)資源

Server Side

客戶(hù)端使用自己的標(biāo)識(shí)換token

  • 客戶(hù)端使用client_id + client_secret + 授權(quán)模式標(biāo)識(shí)訪(fǎng)問(wèn)授權(quán)服務(wù)器的頒發(fā)token端點(diǎn)
  • 授權(quán)服務(wù)器校驗(yàn)通過(guò)返回token給客戶(hù)端
  • 客戶(hù)端保存token

Check Access Token

客戶(hù)端使用token訪(fǎng)問(wèn)資源

  • 客戶(hù)端在請(qǐng)求頭中添加token,訪(fǎng)問(wèn)資源服務(wù)器
  • 資源服務(wù)器收到請(qǐng)求,先調(diào)用校驗(yàn)token的方法(可以是遠(yuǎn)程調(diào)用授權(quán)服務(wù)器校驗(yàn)端點(diǎn),也可以直接訪(fǎng)問(wèn)授權(quán)存儲(chǔ)器手動(dòng)校對(duì))
  • 資源服務(wù)器校驗(yàn)成功,返回資源

OAuth3授權(quán)模式的選型

考慮到授權(quán)場(chǎng)景的多樣性,可以參考以下兩種選型方式

按授權(quán)需要的多端情況

OAuth 2.0 概念及授權(quán)流程梳理

按客戶(hù)端類(lèi)型與所有者

OAuth 2.0 概念及授權(quán)流程梳理

后記

學(xué)習(xí)OAuth3有一段時(shí)間了,把學(xué)到的知識(shí)分享出來(lái),行文中難免有錯(cuò)誤,如果發(fā)現(xiàn)還請(qǐng)留言指正,謝謝合作

參考文章與資料:

https://time.geekbang.org/course/intro/84 作者:楊波

https://blog.csdn.net/sinat_25295611/article/details/84980987 作者:Kayfen

How OAuth 2.0 works and how to choose the right flow 作者:Lorenzo Spyna

原文出處https://www.cnblogs.com/hellxz/p/oauth3_process.html

到此這篇關(guān)于OAuth 2.0 概念及授權(quán)流程梳理的文章就介紹到這了,更多相關(guān)OAuth3.0 授權(quán)流程內(nèi)容請(qǐng)搜索億速云以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持億速云!

向AI問(wèn)一下細(xì)節(jié)
推薦閱讀:
  1. 理解Oauth2.0
  2. oauth2.0理解

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI