中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

OAuth 2.0 概念及授權流程梳理

發布時間:2020-09-29 02:24:10 來源:腳本之家 閱讀:208 作者:東北小狐貍 欄目:開發技術

OAuth3 的概念

OAuth是一個關于授權的開放網絡標準,OAuth3是其2.0版本。

它規定了四種操作流程(授權模式)來確保安全

應用場景有第三方應用的接入、微服務鑒權互信、接入第三方平臺、第一方密碼登錄等

Java王國中Spring Security也對OAuth3標準進行了實現。

OAuth3授權模式

OAuth3定義了四種授權模式(授權流程)來對資源的訪問進行控制

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

無論哪個模式(流程)都擁有三個必要角色:客戶端授權服務器資源服務器,有的還有用戶(資源擁有者),下面簡單介紹下授權流程

授權碼模式(Authorization Code Grant)

授權碼模式是OAuth3目前最安全最復雜的授權流程,先放一張圖,稍做解釋

OAuth 2.0 概念及授權流程梳理

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

  • Client Side:用戶+客戶端與授權服務器的交互
  • Server Side:客戶端與授權服務器之間的交互
  • Check Access Token:客戶端與資源服務器之間的交互 + 資源服務器與授權服務器之間的交互

整體上來說,可以用一句話概括授權碼模式授權流程

客戶端換取授權碼,客戶端使用授權碼換token,客戶端使用token訪問資源

接下來對這三部分進行一些說明 :

前提條件:

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

Client Side

客戶端換取授權碼

這個客戶端可以是瀏覽器,

  • 客戶端將client_id + client_secret + 授權模式標識(grant_type) + 回調地址(redirect_uri)拼成url訪問授權服務器授權端點
  • 授權服務器返回登錄界面,要求用戶登錄(此時用戶提交的密碼等直接發到授權服務器,進行校驗)
  • 授權服務器返回授權審批界面,用戶授權完成
  • 授權服務器返回授權碼到回調地址

Server Side

客戶端使用授權碼換token

  • 客戶端接收到授權碼,并使用授權碼 + client_id + client_secret訪問授權服務器頒發token端點
  • 授權服務器校驗通過,頒發token返回給客戶端
  • 客戶端保存token到存儲器(推薦cookie)

Check Access Token

客戶端使用token訪問資源

  • 客戶端在請求頭中添加token,訪問資源服務器
  • 資源服務器收到請求,先調用校驗token的方法(可以是遠程調用授權服務器校驗端點,也可以直接訪問授權存儲器手動校對)
  • 資源服務器校驗成功,返回資源

這里的說明省去了一些參數,如scope(請求token的作用域)、state(用于保證請求不被CSRF)、redirect_uri(授權服務器回調uri),先理解概念,實現的時候再去要求

隱式授權模式(Implicit Grant)

OAuth 2.0 概念及授權流程梳理

隱式授權模式大致可分為兩部分:

  • Client Side:用戶+客戶端與授權服務器的交互
  • Check Access Token:客戶端與資源服務器之間的交互 + 資源服務器與授權服務器之間的交互

用一句話概括隱式授權模式授權流程

客戶端讓用戶登錄授權服務器換token,客戶端使用token訪問資源

Client Side

客戶端讓用戶登錄授權服務器換token

  • 客戶端(瀏覽器或單頁應用)將client_id + 授權模式標識(grant_type)+ 回調地址(redirect_uri)拼成url訪問授權服務器授權端點
  • 授權服務器跳轉用戶登錄界面,用戶登錄
  • 用戶授權
  • 授權服務器訪問回調地址返回token給客戶端

Check Access Token

客戶端使用token訪問資源

  • 客戶端在請求頭中添加token,訪問資源服務器
  • 資源服務器收到請求,先調用校驗token的方法(可以是遠程調用授權服務器校驗端點,也可以直接訪問授權存儲器手動校對)
  • 資源服務器校驗成功,返回資源

密碼模式(Resource Owner Password Credentials Grant)

OAuth 2.0 概念及授權流程梳理

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

  • Client Side: 用戶與客戶端交互,客戶端與授權服務器交互
  • Check Access Token:客戶端與資源服務器之間的交互 + 資源服務器與授權服務器之間的交互

一句話概括用戶名密碼模式流程:

用戶在客戶端提交賬號密碼換token,客戶端使用token訪問資源

Client Side
用戶在客戶端提交賬號密碼換token

  • 客戶端要求用戶登錄
  • 用戶輸入密碼,客戶端將表單中添加客戶端的client_id + client_secret發送給授權服務器頒發token端點
  • 授權服務器校驗用戶名、用戶密碼、client_id、client_secret,均通過返回token到客戶端
  • 客戶端保存token

Check Access Token

客戶端使用token訪問資源

  • 客戶端在請求頭中添加token,訪問資源服務器
  • 資源服務器收到請求,先調用校驗token的方法(可以是遠程調用授權服務器校驗端點,也可以直接訪問授權存儲器手動校對)
  • 資源服務器校驗成功,返回資源

客戶端模式(Client Credentials Grant)

OAuth 2.0 概念及授權流程梳理

客戶端模式大體上分為兩部分:

  • Server Side: 客戶端與授權服務器之間的交互
  • Check Access Token: 客戶端與資源服務器,資源服務器與授權服務器之間的交互

一句話概括客戶端模式授權流程:

客戶端使用自己的標識換token,客戶端使用token訪問資源

Server Side

客戶端使用自己的標識換token

  • 客戶端使用client_id + client_secret + 授權模式標識訪問授權服務器的頒發token端點
  • 授權服務器校驗通過返回token給客戶端
  • 客戶端保存token

Check Access Token

客戶端使用token訪問資源

  • 客戶端在請求頭中添加token,訪問資源服務器
  • 資源服務器收到請求,先調用校驗token的方法(可以是遠程調用授權服務器校驗端點,也可以直接訪問授權存儲器手動校對)
  • 資源服務器校驗成功,返回資源

OAuth3授權模式的選型

考慮到授權場景的多樣性,可以參考以下兩種選型方式

按授權需要的多端情況

OAuth 2.0 概念及授權流程梳理

按客戶端類型與所有者

OAuth 2.0 概念及授權流程梳理

后記

學習OAuth3有一段時間了,把學到的知識分享出來,行文中難免有錯誤,如果發現還請留言指正,謝謝合作

參考文章與資料:

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

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

向AI問一下細節
推薦閱讀:
  1. 理解Oauth2.0
  2. oauth2.0理解

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

青海省| 沾益县| 东方市| 仁寿县| 霍山县| 无为县| 海盐县| 商南县| 威信县| 赤峰市| 柳江县| 汉中市| 承德县| 富阳市| 沁阳市| 铅山县| 蚌埠市| 台南市| 成都市| 南丰县| 闽清县| 定结县| 雷山县| 加查县| 乌鲁木齐市| 长白| 铜川市| 施甸县| 藁城市| 丹凤县| 沂源县| 尼勒克县| 牡丹江市| 东城区| 宣城市| 剑川县| 庄河市| 镇赉县| 瑞昌市| 英德市| 罗定市|