OAuth 授權協議 | 都雲原生時代了,我們應該多懂一點OAuth ?

来源:https://www.cnblogs.com/mazhilin/archive/2022/04/07/16114234.html
-Advertisement-
Play Games

We are not here because we are free .we are here because we are not free. 我們在這裡不是因為我們自由,我們在這裡是因為我們不自由。——《黑客帝國》 寫在開頭 在這個互聯網最美好的時代,隨著業務產品線的增多,業務應用平臺逐漸增多 ...


黑客帝國

We are not here because we are free .we are here because we are not free.

我們在這裡不是因為我們自由,我們在這裡是因為我們不自由。——《黑客帝國》

寫在開頭

在這個互聯網最美好的時代,隨著業務產品線的增多,業務應用平臺逐漸增多後,每個系統單獨管理各自的用戶數據容易形成信息孤島,分散的用戶管理模式阻礙了企業應用向平臺化演進。當業務產品線發展到一定規模,構建統一的標準化賬戶管理體系將是必不可少的,構建一套互聯網雲平臺的重要基礎設施,能夠為平臺帶來統一的帳號管理、身份認證、用戶授權等基礎能力,為企業帶來諸如跨系統單點登錄、第三方授權登錄等基礎能力,為構建開放平臺和業務生態提供了必要條件和基本準繩。
關於OAuth授權協議的問題,也許我們中的大多數都還是從玩Github 開始的,或者就是從阮一峰的網路日誌看到的,不論是何種情況下接觸到OAuth的。我們都要相信,OAuth的正確打開方式,絕對不是三言兩語的事情,需要經過系統的分析和項目實戰,才會有不一樣的味道,不然我們遇到的都是壞味道。

Oauth

OAuth授權協議

OAuth授權協議

An open protocol to allow secure API authorization in a simple and standard method from web, mobile and desktop applications.

基本定義

OAuth授權協議為用戶資源的授權提供了一個安全的、開放而又簡易的標準。與以往的授權方式不同之處是OAUTH的授權不會使第三方觸及到用戶的帳號信息(如用戶名與密碼),即第三方無需使用用戶的用戶名與密碼就可以申請獲得該用戶資源的授權,因此OAUTH是安全的。OAuth是Open Authorization的簡寫。

一般來說,OAuth是一個授權協議,它允許軟體應用代表(而不是充當)資源擁有者去訪問資源擁有者的資源。應用向資源擁有者請求授權,然後取得令牌(token),並用它來訪問資源,並且資源擁有者不用嚮應用提供用戶名和密碼等敏感數據。目前常用的是2.0版本,又稱為OAuth 2.0 。從官網來看,新版本2.1不久面世。

其實挑點實際話講,OAuth 2.0 並不是一門新的技術,從 2007 年 OAuth 1.0 面世,到 2011 年發佈 OAuth 2.0 草案。但是,看似簡單的 OAuth 2.0 會讓我們望而卻步,在如何使用授權碼流程上躊躇不前。比如,在 Web 應用中到底應該怎麼使用授權碼流程,移動 App 中還能使用授權碼流程嗎?
當我帶著這些問題嘗試到網上搜索資料時,那些不成體系的資料著實也讓我走了不少彎路。不知道你是不是也被下麵問題困擾著:

  1. 開發一個 Web 應用,當使用 OAuth 2.0 的時候,擔心授權碼被攔截,卻因為沒有較好的解決方法而一籌莫展
  2. 開發一款移動 App,當使用 OAuth 2.0 的時候,在確定是否需要 Server 端上,花費了大把的時間
  3. 開發一個小程式,當使用 OAuth 2.0 的時候,在確定是否需要 Server 端上,需要考慮的場景是否足夠多
  4. 開發一個面向多產品的統一授權認證平臺時,比如open-iam,對於PC平臺,後臺平臺,門戶平臺,移動端APP平臺,小程式平以及大數據監控平臺,這樣的一個需求時,當使用 OAuth 2.0 的時候,是否能實現和滿足需求
  5. 開發一個統一授權認證平臺,對於用戶和資源之間如何界定設置,前後端分離模式,又如何保證用戶登錄實現平臺的跳轉和通信
  6. 在不同架構模式背景下,對於OAuth的使用,其中的技術選型又會有怎樣的差異,更多情況下,我們的技術選型是否可取

從大方向上總結來看,OAuth 2.0 這種授權協議,就是保證第三方(軟體)只有在獲得授權之後,才可以進一步訪問授權者的數據。因此,我們常常還會聽到一種說法,OAuth 2.0 是一種安全協議。現在訪問授權者的數據主要是通過 Web API,所以凡是要保護這種對外的 API 時,都需要這樣授權的方式。而 OAuth 2.0 的這種頒發訪問令牌的機制,是再合適不過的方法了。同時,這樣的 Web API 還在持續增加,所以 OAuth 2.0 是目前 Web 上重要的安全手段之一。

基本規範

OAuth 2.0 的標準是 RFC 6749 文件。OAuth 引入了一個授權層,用來分離兩種不同的角色:客戶端和資源所有者。資源所有者同意以後,資源伺服器可以向客戶端頒發令牌。客戶端通過令牌,去請求數據。也就是說,OAuth 的核心就是向第三方應用頒發令牌。

OAuth 標準應用規範

按照一般軟體系統開發定義開看,一個 OAuth 標準應用規範都有如下幾個定義規範,或者說基本角色:

  • Third-party /Client application:第三方應用端程式,一般系統平臺都稱“客戶端”(client)。代表資源擁有者訪問受保護資源的軟體,它使用OAuth 來獲取訪問許可權。
  • HTTP service:HTTP服務提供商,一般系統平臺都簡稱“服務提供商”。
  • Resource Owner:資源所有者,一般系統平臺都稱“用戶”(user),即登錄用戶。是有權將訪問許可權授權給客戶端的主體,在大多數情況下,資源擁有者是一個人,他使用客戶端軟體訪問受他控制的資源;
  • User Agent:用戶代理,一般系統平臺就是指瀏覽器。
  • Authorization server:認證伺服器,即服務提供商專門用來處理認證的伺服器。一個HTTP 伺服器,它在OAuth 系統中充當中央組件。授權伺服器對資源擁有者和客戶端進行身份認證,讓資源擁有者向客戶端授權、為客戶端頒發令牌。某些授權伺服器還會提供額外的功能,例如令牌內省、記憶授權決策
  • Resource server:資源伺服器,即服務提供商存放用戶生成的資源的伺服器。它與認證伺服器,可以是同一臺伺服器,也可以是不同的伺服器。資源伺服器能夠通過HTTP 伺服器進行訪問,在訪問時需要OAuth 訪問令牌。受保護資源需要驗證收到的令牌,並決定是否響應以及如何響應請求。

這裡必須強調一點的是,這裡說的第三方,大多數指的是區別於當前應用系統的其他應用,包括不限於微信,QQ,新浪,抖音,今日頭條等等。按照正常的系統的應用來說,在所用系統之前,都會有一個類似於open-iam身份識別與訪問管理的系統的,至少來講都會有這麼一個系統組件的。這樣來說,這個IAM應用平臺在多產品業務線,甚至說是多租戶場景模式來說,這是一個系統底層架構的核心元組件,所有其他的業務應用系統,都是圍繞這個組件來進行整合和糅合其他的業務需求的,如圖所示:

應用舉例

其實不論在單體架構時代,還是分散式(RPC)服務時代,以及眼花繚亂微服務時代,還是現在都在追捧的雲原生架構時代,授權和認證應用模塊在日常開發里,基本上是一個框架的底層組件來構建和關聯第三方軟體以及其他應用的。互聯網中所有的受保護資源,幾乎都是以 Web API 的形式來提供訪問的。每次都是用訪問令牌而不是用戶名和密碼來請求用戶的數據,才大大減少了安全風險上的“攻擊面”,至少從系統架構層面來說,引入 OAuth 主要還是為項目架構底層保駕護航。

基本流程

在一個日常應用系統里,對於Oauth應用的系統流轉流程如下:
Ouath應用授權

但是實際上,對於OAuth2 的工作原理我們通過結構化思維的拆解分析可以發現,Oauth應用的最終目的,是要獲取一個叫做“訪問令牌”的東西。在業務系統獲取到訪問令牌之後,才有足夠的 “能力” 去請求系統拿到系統給我授權的資源列表數據。不論是任何終端應用,訪問我們提供的統一授權服務,幾乎都需要依托Oauth來經歷和經過如下流程:
Oauth執行流程

其中,OAuth 授權的核心就是頒發訪問令牌、使用訪問令牌。比如,業務應用系統訪問統一鑒權管控平臺,其間統一鑒權管控平臺會依據業務應用系統的需要(請求參數),為其生成授權碼,業務應用系統拿到授權碼表示得到了授權,再次訪問統一鑒權管控平臺,後續驗證完畢生成訪問令牌,返回業務應用系統,最後業務應用系統拿到訪問令牌,去查詢對應的授權資源列表和數據,這就是使用訪問令牌。其中主要的動作,就是生成授權碼–> 生成訪問令牌–> 使用訪問令牌。其中授權碼許可(Authorization Code)類型。它是 OAuth 2.0 中最經典、最完備、最安全、應用最廣泛的許可類型。除了授權碼許可類型外,OAuth 2.0 針對不同的使用場景,還有 3 種基礎的許可類型,分別是隱式許可(Implicit)、客戶端憑據許可(Client Credentials)、資源擁有者憑據許可(Resource Owner Password Credentials)。

總結來說,OAuth 授權有 3 個關鍵點:

  1. OAuth 2.0 的核心是授權許可,更進一步說就是令牌機制。對於業務應用系統來說,只有拿到頒發的訪問令牌,也就是得到了授權許可,然後才可以代表用戶訪問他們的數據。
  2. 互聯網中所有的受保護資源,幾乎都是以 Web API 的形式來提供訪問的。我們說 OAuth 2.0 與安全相關,是用來保護 Web API 的。另外,第三方軟體通過 OAuth 2.0 取得訪問許可權之後,用戶便把這些許可權委托給了第三方軟體,我們說 OAuth 2.0 是一種委托協議,也沒問題。
  3. 業務應用系統對於統一鑒權管控平臺算是客戶端,統一鑒權管控平臺是服務端,而且是獨立部署服務的,每次都是用訪問令牌而不是用戶名和密碼來請求用戶的數據,才大大減少了安全風險上的“攻擊面”。

版權聲明:本文為博主原創文章,遵循相關版權協議,如若轉載或者分享請附上原文出處鏈接和鏈接來源。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 我們通過知識體系新開發的幾個基於 OpenHarmony3.1 Beta 標準系統的樣例:分散式音樂播放、傳炸彈、購物車等樣例,分別介紹下音樂播放、顯示動畫、動畫轉場(頁面間轉場)三個進階技能。 ...
  • 1. Parcel 簡介 在 IPC 過程中,發送方可以使用 Parcel 提供的寫方法,將待發送的數據以特定格式寫入Parcel對象。接收方可以使用 Parcel 提供的讀取方法從 Parcel 對象中讀取特定格式的數據。 Parcel 實例的預設容量為200KB。如果您想要更多或更少,請使用 s ...
  • 除了 OpenHarmony 的開發知識賦能,本期系列課程也關註開發者們的綜合能力培養,涵蓋如何啃論文,開源社區如何運轉,如何領航職場、通關面試、規劃職業生涯等內容。 ...
  • Android可視化埋點是Android全埋點的增強。開發者可以將App界面同步至DTM界面,併在DTM界面通過可視化點擊的方式添加埋點事件。目前Android可視化埋點包含兩種埋點方式:普通可視化埋點和按Tag模板埋點。 相比於代碼埋點,可視化埋點有以下優勢: 研發人員僅需要完成DTM SDK集成 ...
  • 1.安裝ngx-translate 運行下麵命令安裝@ngx-translate/core和@ngx-translate/http-loader: npm install @ngx-translate/core --save npm install @ngx-translate/http-loade ...
  • 將 原數據 對象拷貝到 新數據 對象中,但不包括 原數據 裡面的子對象 代碼實例 // 原數據 let y = { 'name': 'zhangsan', 'age': '18', // 原數據中的子對象 'language': [1, [2, 3], [4, 5]], }; // 創建第二個對象 ...
  • 基於Vue的前端框架有很多,這幾年隨著前端技術的官方應用,總有是學不完的前端知識在等著我們,一個人的精力也是有限,不可能一一掌握,不過我們學習很大程度都會靠興趣驅動,或者目標導向,最終是可以以點破面,逐步掌握各種前端知識的。本篇隨筆主要以實際應用場景為例介紹一些Vue前端技術的拓展,供大家參考學習。 ...
  • 最近,有同學詢問,如何使用 CSS 實現如下效果: 看起來是個很有意思的動效。 仔細思考一下,要想實現這類效果,其實用到的核心屬性只有一個 -- background-clip: text。 有意思的 background-clip: text background-clip: text 之前也提到 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...