【身份安全】OAuth 2.0工作原理(一)

目錄

  • OAuth 授權框架
    • 一、OAuth 角色
    • 二、協議流程
    • 三、應用注冊(Application Registration)
      • 用戶 ID(Client ID) 和 用戶密碼(Client Secret)
    • 四、權限授予
        • 1、授權碼鏈接
        • 2、用戶授權申請
        • 3、應用程序接收授權碼
        • 4、應用程序請求訪問令牌
        • 5、應用程序接收訪問令牌
    • 五、Casdoor 運行原理
        • 1、應用向用戶請求授權
        • 2、用戶給應用授權
        • 3、API server 驗證 APP 的授權認證
        • 4、API server 給 APP 頒發令牌
        • 5、APP 用令牌給資源服務器驗證
        • 6、APP 使用令牌訪問資源服務器資源
        • 回調網址
        • 代碼
          • 后端代碼
          • 前端代碼

OAuth 授權框架

OAuth 是一個授權框架,它使應用程序能夠在 HTTP 服務上獲得對用戶帳戶的有限訪問權限。它的工作原理是將用戶身份驗證委托給托管用戶帳戶的服務,并授權第三方應用程序訪問該用戶帳戶。OAuth 2 為 Web 和桌面應用程序以及移動設備提供授權流程。


一、OAuth 角色

  • 資源擁有者(Resource Owner)
    資源所有者是授權應用程序訪問其帳戶的用戶。應用程序對用戶帳戶的訪問權限僅限于授予的授權范圍(例如讀取或寫入訪問權限)。

  • 客戶端(Client)
    客戶端是想要訪問用戶賬戶的應用程序。在它可以這樣做之前,它必須得到用戶的授權,并且授權必須由 API 驗證。

  • 資源服務器(Resource Server)
    資源服務器托管受保護的用戶帳戶。

  • 授權服務器(Authorization Server)
    授權服務器驗證用戶的身份,然后向應用程序頒發訪問令牌。

從應用程序開發人員的角度來看,服務的 API 既可以充當資源服務器角色,也可以充當授權服務器角色。我們將把這兩個角色結合起來稱為服務或 API 角色。


二、協議流程

在這里插入圖片描述

過程步驟

  1. 應用向用戶請求訪問某服務資源的授權。
  2. 用戶授權應用的請求,給 [授權許可]。
  3. 應用提供自身的 [身份驗證] + [授權許可],請求 [訪問令牌]。
  4. [身份驗證] 通過且 [授權許可] 有效,頒發 [訪問令牌](即 token)。
  5. 應用使用 [訪問令牌] 請求資源服務器對應的資源。
  6. 若 [訪問令牌] 有效,允許訪問相應資源。
    在這里插入圖片描述

三、應用注冊(Application Registration)

在將 OAuth 與您的應用程序一起使用之前,您必須向該服務 API(授權服務器 + 資源服務器)注冊您的應用程序。這是通過服務網站的開發人員或 API 部分中的注冊表格完成的,您將在其中提供以下信息(可能還有關于您的應用程序的詳細信息):

  • 應用名稱
  • 申請網站(資源)
  • 重定向 URL(Redirect URI)或回調 URL(Callback URL)

重定向 URI 是服務在用戶授權(或拒絕)您的應用程序后重定向用戶的位置,因此是您的應用程序將處理授權代碼或訪問令牌的部分。

用戶 ID(Client ID) 和 用戶密碼(Client Secret)

注冊應用程序后,該服務將以客戶端標識符和客戶端密碼的形式頒發客戶端憑據。客戶端 ID 是一個公開的字符串,服務 API 使用它來識別應用程序,還用于構建提供給用戶的授權 URL。Client Secret 用于在應用程序請求訪問用戶帳戶時向服務 API 驗證應用程序的身份,并且必須在應用程序和服務 API 之間保密。


四、權限授予

在前面概述的抽象協議流程中,前四個步驟涵蓋了獲取授權授予和訪問令牌。授權授予類型取決于應用程序請求授權所使用的方法,以及 API 支持的授權類型。OAuth 2 定義了三種主要的授權類型,每種類型在不同情況下都有用:

  • 授權碼:與服務器端應用程序一起使用。
  • 客戶端憑證:用于具有 API 訪問權限的應用程序。
  • 設備代碼:用于缺少瀏覽器或有輸入限制的設備。

授權類型:授權碼

授權碼授予類型是最常用的,因為它針對服務器端應用程序進行了優化,其中源代碼不公開,并且可以維護 Client Secret 的機密性。這是一個基于重定向的流程,這意味著應用程序必須能夠與用戶代理(即用戶的網絡瀏覽器)交互并接收通過用戶代理路由的 API 授權代碼。
在這里插入圖片描述

【授權碼】:用戶給 APP,用于 APP 向 API server 申請資源訪問令牌 token。
【令牌】:就是 token,API server 頒發給 APP,用于 APP 向資源服務器請求資源。


1、授權碼鏈接

首先給用戶提供授權碼鏈接:

https://cloud.com/v1/oauth/authorize?response_type=code&client_id=CLIENT_ID&redirect_uri=CALLBACK_URL&scope=read

拆解:

  • 授權端點https://cloud.com/v1/oauth/authorize
  • 應用程序的客戶端 IDclient_id=CLIENT_ID(服務器 API 識別應用程序【知道用戶是誰】)
  • 重定向 URLredirect_uri=CALLBACK_URL(服務在被用戶授權后重定向 URL user-agent【API server 授權之后知道給誰發消息】)
  • 相應類型response_type=code(指定應用程序正在請求授權碼)
  • 權限范圍scope=read(指定應用程序訪問級別為只讀)

Casdoor 示例:

endpoint/login/oauth/authorize?client_id=xxx&response_type=code&redirect_uri=xxx&scope=read&state=xxx
  • client_id:用戶 ID,可以在多個應用程序 APP 中。
  • redirect_uri:應用程序 APP 回調的 URL,通過這個信息,Casdoor 可以知道在授權后向哪里發送信息。
  • state:應用程序的名稱。

2、用戶授權申請

當用戶單擊該鏈接時,他們必須首先登錄該服務以驗證他們的身份(除非他們已經登錄)。然后服務會提示他們授權或拒絕應用程序訪問他們的帳戶。


3、應用程序接收授權碼

如果用戶單擊授權應用程序,該服務會將用戶代理重定向到在客戶端注冊期間指定的應用程序重定向 URI 以及授權代碼。重定向看起來像這樣(假設應用程序是 dropletbook.com):

https://dropletbook.com/callback?code=AUTHORIZATION_CODE

4、應用程序請求訪問令牌

應用程序通過將授權代碼連同身份驗證詳細信息(包括 client secret)傳遞到 API 令牌端點,從 API 請求訪問令牌。

示例請求:

https://cloud.com/v1/oauth/token?client_id=CLIENT_ID&client_secret=CLIENT_SECRET&grant_type=authorization_code&code=AUTHORIZATION_CODE&redirect_uri=CALLBACK_URL

5、應用程序接收訪問令牌

如果授權有效,API 將向應用程序發送包含訪問令牌(以及可選的刷新令牌)的響應。整個響應看起來像這樣:

{"access_token": "ACCESS_TOKEN","token_type": "bearer","expires_in": 2592000,"refresh_token": "REFRESH_TOKEN", // 用于請求新的令牌"scope": "read","uid": 100101,"info": {"name": "Mark E. Mark","email": "mark@thefunkybunch.com"}
}

現在該應用程序已獲得授權。它可以使用令牌通過服務 API 訪問用戶的帳戶,僅限于訪問范圍,直到令牌過期或被撤銷。如果發布了刷新令牌,如果原始令牌已過期,則可以使用它來請求新的訪問令牌。


五、Casdoor 運行原理

1、應用向用戶請求授權
endpoint/login/oauth/authorize?client_id=xxx&response_type=code&redirect_uri=xxx&scope=read&state=xxx
  • client_id:用戶 ID,可以在多個應用程序 APP 中。
  • redirect_uri:應用程序 APP 回調的 URL,通過這個信息,Casdoor 可以知道在授權后向哪里發送信息。
  • state:應用程序的名稱。

應用程序對用戶說:

“嘿,現在我需要一些資源,我需要您的許可才能拿這些資源。您愿意跳轉到這個 URL,填寫您的用戶名和密碼嗎?”

使用正確的 URL,您的應用程序將會讓用戶向此 URL 發起請求,授權請求已完成。


2、用戶給應用授權

此步驟比較直接:用戶會被重定向到上面的 URL,看到來自 Casdoor 的登錄頁面。通過在登錄頁面輸入正確的用戶名和認證信息,Casdoor 現在能成功識別用戶,將發送 code 和 state 返回第 1 步中設置的回調 URL。

“用戶打開網址并向 Casdoor 提供憑據。Casdoor 說:‘好~ 這是我在數據庫中知道的用戶(授權應用獲取 code 和 state)。然后我將使用回調 URL 發送 code 和 state 返回應用(redirect_uri)。’”


3、API server 驗證 APP 的授權認證

在這一步,您的應用程序已經有了來自第 2 步的代碼,它將會告訴 Casdoor:

“嘿,現在用戶同意給我 code,你想檢查這個 code 并給我 access_token 嗎?”


4、API server 給 APP 頒發令牌

在這一步,Casdoor 會通知應用程序:

“這個 code 應該是合法的,你一定就是那個正確的應用程序。這是 access_token。”


5、APP 用令牌給資源服務器驗證

在這個步驟中,您的應用程序說:

“很好,剛剛獲得了最新的 access_token,我現在可以使用它從資源服務器獲得更多寶貴的東西!”

您的應用程序轉向資源服務器:

“嗨朋友,想檢查這個 access_token 嗎?我從 Casdoor 得到了訪問令牌,你想看看這是否與 Casdoor 的一致嗎?”


6、APP 使用令牌訪問資源服務器資源

資源服務器又告知您的應用程序:

“不錯~ 它似乎就像我在 Casdoor 中的那個一樣。Casdoor 說誰擁有這個 access_token 誰就可以擁有這些受保護的資源。現在,你可以自取這些資源了!”

這就是 Casdoor 如何與您的應用程序一起工作。


回調網址

SSO 登錄成功之后會傳信息的網址,會傳遞 code 和應用名稱。
在這里插入圖片描述
拿到 code 向 SSO 的 API 請求獲得 access_token【后面就用 access_token 放到用戶的 cookie 中使用】。


代碼
后端代碼

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

前端代碼

在這里插入圖片描述


by 久違

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/76092.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/76092.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/76092.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

大疆上云api直播功能如何實現

概述 流媒體服務器作為直播畫面的中轉站,它接收推流端的相機畫面,同時拉流端找它獲取相機的畫面。整個流程如下: 在流媒體服務器上創建流媒體應用(app),一個流媒體服務器上面可以創建多個流媒體應用約定推拉流的地址。假設流媒體服務器工作在1935端口上面,假設創建的流…

ESP-01模塊連接手機熱點問題及解決方法

在使用ESP-01模塊連接手機熱點時,可能會遇到一些問題。本文將詳細介紹如何解決這些問題,并分享最終通過將WiFi切換到2.4GHz成功解決問題的經驗。 一、問題描述 在嘗試使用ESP-01模塊連接手機熱點時,遇到了連接失敗的問題。以下是操作過程中…

NG-ZORRO中tree組件的getCheckedNodeList怎么使用

在 NG-ZORRO(Ant Design for Angular) 的 Tree 組件 中,getCheckedNodeList 方法用于獲取當前選中的節點列表(包括半選狀態節點)。以下是具體用法和示例: 基本用法 首先,確保你已通過 ViewChil…

業務流程先導及流程圖回顧

一、測試流程回顧  1. 備測內容回顧  備測內容: 本次測試涵蓋買家和賣家的多個業務流程,包括下單流程、發貨流程、搜索退貨退款、支付搶購、換貨流程、個人中心優惠券等。 2. 先測業務強調  1)測試業務流程 …

從ChatGPT到AutoGPT——AI Agent的范式遷移

一、AI Agent的范式遷移 1. ChatGPT的局限性與Agent化需求 單輪對話的“工具屬性” vs. 多輪復雜任務的“自主性” ChatGPT 作為強大的生成式AI,雖然能夠進行連貫對話,但本質上仍然是“工具型”AI,依賴用戶提供明確的指令,而無法自主規劃和執行任務。 人類介入成本過高:提…

【Kafka】分布式消息隊列的核心奧秘

文章目錄 一、Kafka 的基石概念?主題(Topic)?分區(Partition)?生產者(Producer)?消費者(Consumer)? 二、Kafka 的架構探秘?Broker 集群?副本機制? 三、Kafka 的卓越特性?高…

【藍橋杯14天沖刺課題單】Day 1

1. 題目鏈接:19937 藝術與籃球 該題目的難點主要在20240413這個日期需要結束程序跳出循環。最開始將該輸出ans的位置放在了for循環之外,此時的日期已經循環完了2024年所有的日期,則最后會統計多而導致結果錯誤。 AC代碼: #incl…

AI人工智能-Jupyter NotbookPycharm:Py開發

安裝 命令: pip install jupyter 啟動 命令: jupyter notebook 啟動成功后,下面網址會默認自動打開當前用戶的根目錄。 其實這個頁面顯示的內容,是我們電腦目錄C:\Users\當前用戶\下的文件夾 我們平常做實驗,希望在…

命懸生死線:當游戲遭遇DDoS圍剿,如何用AI破局?

文章作者:騰訊宙斯盾DDoS防護團隊 一、血色戰場:DDoS攻擊游戲產業的致命瞬間 全球黑色星期五 這是一場波及全球的“黑色星期五”,起初無人察覺,包括小林。 他剛下班到家就迫不及待打開電腦,準備體驗期待已久的《黑神話…

使用HTML5和CSS3實現3D旋轉相冊效果

使用HTML5和CSS3實現3D旋轉相冊效果 這里寫目錄標題 使用HTML5和CSS3實現3D旋轉相冊效果項目介紹技術棧核心功能實現思路1. HTML結構2. CSS樣式解析2.1 基礎樣式設置2.2 3D效果核心樣式2.3 卡片樣式 3. JavaScript交互實現3.1 旋轉控制3.2 自動播放功能 技術要點總結項目亮點總…

【HTML 基礎教程】HTML <head>

HTML <head> 查看在線實例 <title> - 定義了HTML文檔的標題 使用 <title> 標簽定義HTML文檔的標題 <base> - 定義了所有鏈接的URL 使用 <base> 定義頁面中所有鏈接默認的鏈接目標地址。 <meta> - 提供了HTML文檔的meta標記 使用 <me…

macbook電腦如何清理鍵盤防止誤觸

M1芯片的MacBook電腦關機后按任意鍵開機&#xff0c;是蘋果的功能設計。這樣設計的目的是為了方便用戶&#xff0c;讓用戶在想要使用電腦時能快速開機。但是清理電腦鍵盤的時候卻成為了一種苦惱 以下是一些清理 MacBook 鍵盤防止誤觸的方法&#xff1a; 使用工具鎖定鍵盤 Cle…

Rust 面向對象

Rust 面向對象 引言 Rust 是一種系統編程語言,以其高性能、內存安全和并發支持而受到關注。Rust 的面向對象特性是其強大功能之一,它允許開發者以面向對象的方式構建復雜的應用程序。本文將深入探討 Rust 的面向對象編程(OOP)特性,包括類的定義、繼承、封裝和多態等概念…

Redis 源碼硬核解析系列專題 - 第二篇:核心數據結構之SDS(Simple Dynamic String)

1. 引言 Redis沒有直接使用C語言的標準字符串(以\0結尾的字符數組),而是自定義了SDS(Simple Dynamic String)。SDS是Redis的基礎數據結構之一,廣泛用于鍵值存儲、命令參數等場景。本篇將深入剖析SDS的實現原理、優勢以及源碼細節。 2. 為什么不用C標準字符串? C字符串…

python-59-基于python內置庫解析html獲取標簽關鍵信息

文章目錄 1 html.parser1.1 初始化和基礎使用1.1.1 handle_starttag(self, tag, attrs)1.1.2 handle_endtag(self, tag)1.1.3 handle_startendtag(self, tag, attrs)1.1.4 handle_data(self, data)1.1.5 handle_comment(self, data)1.2 解析HTML文檔的流程2 百度搜索關鍵詞鏈接…

Java的string默認值

在Java中&#xff0c;String類型的默認值取決于其定義和實例化的方式。 以下是關于String默認值的詳細說明 未實例化的String變量? 如果定義一個String變量但未對其進行實例化&#xff08;即未使用new關鍵字或直接賦值&#xff09;&#xff0c;其默認值為:ml-search[null]。這…

高并發系統下的訂單號生成服務設計與實現

目錄 引言 訂單號設計的關鍵考量因素 基礎需求分析 唯一性保障 數據量預估 可讀性設計 系統架構考量 分庫分表兼容 可擴展性設計 技術選型與比較 性能優化 高可用性保障 實踐案例&#xff1a;高并發系統訂單號結構設計 結構詳解 業務類型標識(2位) 唯一標識部分…

使用LLaMAFactory微調Qwen大模型

一、環境配置與工具安裝 1. 硬件要求 GPU:至少1塊NVIDIA GPU(推薦RTX 4090/A100/H100,顯存≥16GB)。內存:≥64GB系統內存。存儲:≥100GB硬盤空間用于模型與數據集存儲。2. 軟件依賴 Python 3.8+:需安裝CUDA支持的PyTorch版本(如torch==2.0.1+cu117)。 依賴庫:通過以…

2025-3-29算法打卡

一&#xff0c;回文判定 1.題目描述&#xff1a; 題目描述 給定一個長度為 nn 的字符串 SS。請你判斷字符串 SS 是否回文。 輸入描述 輸入僅 11 行包含一個字符串 SS。 1≤∣S∣≤1061≤∣S∣≤106&#xff0c;保證 SS 只包含大小寫、字母。 輸出描述 若字符串 SS 為回…

Android 接 Twitter Share ,常見問題及解決方案

1. 應用未授權或授權失敗 問題描述:當嘗試分享內容到 Twitter 時,應用提示未授權,或者在授權過程中出現錯誤,無法獲取授權碼或訪問令牌。解決方案 檢查 Twitter API 密鑰和密鑰密碼:確保在 Twitter 開發者平臺創建應用后,獲取的 API 密鑰(Consumer Key)和 API 密鑰密碼…