MASA Auth - SSO與Identity設計

AAAA

AAAA即認證、授權、審計、賬號(Authentication、Authorization、Audit、Account)。在安全領域我們繞不開的兩個問題:

  • 授權過程可靠:讓第三方程序能夠訪問所需資源又不泄露用戶數據,常用的多方授權協議主要有 OAuth2 和 SAML 2.0

  • 授權結果可控:授權結果用于功能或資源的訪問控制。常見的權限控制模型:DAC、MAC、RBAC、ABAC

    想了解權限控制模型的話可以參照上一篇的權限設計

OpenId(Authentication)

OpenID 是一個以用戶為中心的數字身份識別框架,它具有開放、分散性。OpenID 的創建基于這樣一個概念:我們可以通過 URI (又叫 URL 或網站地址)來認證一個網站的唯一身份,同理,我們也可以通過這種方式來作為用戶的身份認證

對于支持OpenID的網站,用戶不需要記住像用戶名和密碼這樣的傳統驗證標記。取而代之的是,他們只需要預先在一個作為OpenID身份提供者(Identity Provider, IDP)的網站上注冊。

OAuth2(Authorization)

舉個例子:MASA.Contrib使用codecov來分析單元測試覆蓋率,OAuth2幫我解決了幾個安全問題:

  • 密碼泄露:不需要把賬號密碼告訴codecov

  • 訪問范圍:只開放讀取源碼的能力

  • 權限回收:在Github上撤回授權即可關閉codecov的訪問能力

那OAuth2是如何解決的呢

我們來看一張圖

36c25d73cf6917d34a229646cc441d22.png

OIDC(Authentication & Authorization)

OpenID Connect 1.0是OAuth 2.0協議之上的一個簡單的身份層。它允許客戶端基于授權服務器執行的身份驗證來驗證終端用戶的身份,并以一種可互操作的、類似rest的方式獲取關于終端用戶的基本概要信息。?

5fe264d1532c162d428f6c8c97bbce7e.png

OIDC常用術語

  • EU:End User:終端用戶

  • RP:Relying Party,用來代指OAuth2中的受信任的客戶端,身份認證和授權信息的消費方

  • OP:OpenID Provider,有能力提供EU認證的服務(比如OAuth2中的授權服務),用來為RP提供EU的身份認證信息

  • ID Token:JWT格式的數據,包含EU身份認證的信息

  • UserInfo Endpoint:用戶信息接口(受OAuth2保護),當RP使用Access Token訪問時,返回授權用戶的信息,此接口必須使用HTTPS

OIDC工作流

  1. RP發送一個認證請求給OP

  2. OP對EU進行身份認證,然后提供授權

  3. OP把ID Token和Access Token(需要的話)返回給RP

  4. RP使用Access Token發送一個請求UserInfo EndPoint

  5. UserInfo EndPoint返回EU的Claims

5a87b357cbcc9031a986b49cd6bda8b7.png

JWT

JWT(JSON Web token)是一個開放的、行業標準的RFC 7519方法,用于在雙方之間安全地表示聲明。?

JWT由3部分組成:標頭(Header)、有效載荷(Payload)和簽名(Signature)。在傳輸的時候,會將JWT的3部分分別進行Base64編碼后用.進行連接形成最終傳輸的字符串

JWT=Base64(Header).Base64(Payload).HMACSHA256(base64UrlEncode(header)+"."+base64UrlEncode(payload),secret)

Header

JWT頭是一個描述JWT元數據的JSON對象,alg屬性表示簽名使用的算法,默認為HMAC SHA256(寫為HS256);typ屬性表示令牌的類型,JWT令牌統一寫為JWT。最后,使用Base64 URL算法將上述JSON對象轉換為字符串保存

{"alg": "HS256","typ": "JWT"
}

Payload

有效載荷部分,是JWT的主體內容部分,也是一個JSON對象,包含需要傳遞的數據(允許自定義)。

{"sub": "1234567890","name": "John Doe","iat": 1516239022
}

Signature

簽名哈希部分是對上面兩部分數據簽名,需要使用base64編碼后的header和payload數據,通過指定的算法生成哈希,以確保數據不會被篡改

HMACSHA256(base64UrlEncode(header) + "." +base64UrlEncode(payload),your-256-bit-secret
)

Identity Server 4常用術語

  • Client:一個從 IdentityServer 請求令牌的軟件——用于驗證用戶(請求身份令牌)或訪問資源(請求訪問令牌)。客戶端必須先向 IdentityServer 注冊,然后才能請求令牌

    • Allowed Scopes:即可以是Identity Resource,也可以是Api Scopes和Api Resources

  • Resource:您希望使用 IdentityServer 保護的東西,如用戶的身份數據或 API。資源名稱唯一

    • User Claims:需要包含在Access Token中的用戶聲明列表

    • API Resource Scope:API資源包含的作用域

    • API Properties:API本身的一些屬性,例如name, display name, description等

    • API Grants:被授權的API列表

    • User Claims:身份聲明,例如sub,name,amr,auth_time等

    • Identity Properties:身份資源本身的一些屬性,例如session_id,issued,expired等

    • Identity Grants:被授予的身份信息

    • API Scope:API作用域

      可以當做是Permission來用,示例見:https://docs.duendesoftware.com/identityserver/v6/fundamentals/resources/api_scopes/

    • Identity Resource:關于用戶的身份信息(又名聲明),例如姓名或電子郵件地址

    • API Resource:一組API Scope

  • Identity Token:身份令牌代表身份驗證過程的結果。它至少包含用戶的標識符以及有關用戶如何以及何時進行身份驗證的信息。它可以包含額外的身份數據

  • Access Token:訪問令牌允許訪問 API 資源。客戶端請求訪問令牌并將其轉發到 API。訪問令牌包含有關客戶端和用戶(如果存在)的信息。API 使用該信息來授權訪問其數據

  • Grant Types:授權類型(其實還有Resource owner password,不推薦使用,就不過多介紹了)

    參考自:https://docs.duendesoftware.com/identityserver/v6/overview/terminology/

    • Machine/Robot:Client Credentials

    • Web Applications:Authorization Code With PKCE(Proof Key for Code Exchange)

      通常我們會選擇id_token token作為response type

      還有一個選擇,就是Implicit。但在隱式流程中,所有令牌都通過瀏覽器傳輸,因此不允許刷新令牌等高級功能。作用范圍就是僅用于用戶身份驗證(服務器端和 JavaScript 應用程序),或身份驗證和訪問令牌請求(JavaScript 應用程序)

    • SPA:Authorization Code With PKCE

    • Native/Mobile Apps:Authorization Code With PKCE

    • TV/Limited Input Device:Device Flow RFC 8628

ASP.Net Core Identity常用術語

  • User:用戶

    • Action:操作,包括增刪改查

    • User Role:用戶角色

    • User Claim:用戶聲明

  • Role:角色

    • Action:操作,包括增刪改查

    • Role Claim:角色聲明

  • Claim:聲明是一個名稱值對,表示使用者是什么,而不是使用者可以做什么。基于聲明的授權檢查聲明的值并允許基于該值的資源訪問

  • Policy:策略

    • 默認策略

    • 回退策略

    • 自定義授權屬性

    • Require Role:要求角色

    • Require Claim:要求聲明

    • Require Assertion:更復雜的可以通過要求斷言來解決,它支持兩個重載的Func(實際是一個,因為有一個是Task)

    • Requirements:基于IAuthorizationRequirement接口定義一個要求,判斷要求要基于AuthorizationHandler<T>來實現對應的邏輯

  • Resource:資源

    • Imperative:官方翻譯是命令式,可以對特定的資源進行授權策略處理

依賴模型

f02ad9ffb69a3d99321dbb7e55e0720f.png

集成RBAC

通過.Net Core Identity的User Claimns將User Role與Api Resource、Api Scope、Identity Resource相關聯,可以在不同業務維度下獲取到用戶的角色

再配合ASP.Net Core Identity的Role或Policy進行資源授權判斷來達到SSO與RBAC的業務落地

總結

本章節涉及到OIDC、ASP.Net Core Identity和RBAC三部分內容。首先OIDC的知識體系就比較龐大,需要根據比較完善的文檔把概念都搞清楚以及為什么這么設計的原因,其次還要進行一些微調把OIDC、RBAC與ASP.Net Core Identity三者結合。可以看出依賴模型其實是個很粗的把各個環節串了起來,但實際落地過程中還免不了對依賴模型進行二次調整來滿足不同業務的需求。后續等MASA Auth落地后會再出第三篇文章來回顧和還原實際落地過程。

(本文章不代表最終設計)

開源地址

MASA.BuildingBlocks:https://github.com/masastack/MASA.BuildingBlocks

MASA.Contrib:https://github.com/masastack/MASA.Contrib

MASA.Utils:https://github.com/masastack/MASA.Utils

MASA.EShop:https://github.com/masalabs/MASA.EShop

MASA.Blazor:https://github.com/BlazorComponent/MASA.Blazor

如果你對我們的 MASA Framework 感興趣,無論是代碼貢獻、使用、提 Issue,歡迎聯系我們

3f6d2f5b5357f45b3270eac7696095be.png

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

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

相關文章

Flutter之ConstrainedBox、SizedBox、UnconstrainedBox(尺寸限制類容器)

1 ConstrainedBox、SizedBox、UnconstrainedBox介紹 1)、ConstrainedBox用于對子組件添加額外的約束。例如&#xff0c;如果你想讓子組件的最小高度是80像素 ConstrainedBox({Key key,required this.constraints,Widget child,}) 我們可以看到這里有個constraints final BoxC…

網頁用數學公式編輯器 可以集成到FCKeditor

網頁用數學公式編輯器 可以集成到FCKeditor 公司有個項目是針對學校的&#xff0c;老師希望能在網頁里編輯數學公式&#xff0c;找了很多工具都不行&#xff0c;最后只能自己動手了。用了兩天的時間弄出了這個東西&#xff0c;希望對大家有用。本程序可以單獨使用&#xff0c;…

【無人機組裝與調試】 第五章 無人機遙控器

【無人機組裝與調試】系列課程全集: 第一章 概述 第二章 關于新西達30A電調說明書的問題 第三章 舵機安裝與調整 第四章 F450四軸裝機實例-選擇機型、需要的器材工具材料 第五章 無人機遙控器 第六章 電調、電池、電機 一、遙控器的概念 遙控器是一種無線發射裝置,通過現代的…

你真的會玩SQL嗎?Case也瘋狂

你真的會玩SQL嗎&#xff1f;系列目錄 你真的會玩SQL嗎&#xff1f;之邏輯查詢處理階段 你真的會玩SQL嗎&#xff1f;和平大使 內連接、外連接 你真的會玩SQL嗎&#xff1f;三范式、數據完整性 你真的會玩SQL嗎&#xff1f;查詢指定節點及其所有父節點的方法 你真的會玩SQL嗎&a…

構建iscsi網絡存儲服務

網絡存儲概述&#xff1a; 隨著企業中數據信息的不斷增長&#xff0c;尤其當成百上千TB的數據需要備份、恢復&#xff0c;以及面臨著擴容、災難恢復等需求時&#xff0c;DAS&#xff08;直接附加存儲&#xff0c;就是通過與計算機主板的I/O接口&#xff0c;如IDE、SCSI相連接由…

10個python辦公黑科技,助你辦公效率提高100倍

1946年&#xff0c;世界上第一臺通用計算機“ENIAC”在美國賓夕法尼亞大學誕生&#xff1b;“ENIAC”占地170平方米&#xff0c;重達30噸&#xff0c;耗電功率約150千瓦&#xff0c;每秒鐘可進行5000次運算&#xff0c;這個龐然大物用于美國國防部進行彈道計算。 在當時&#…

Flutter之Container

1、Container介紹 我們先看它的構造方法 Container({Key key,this.alignment,this.padding, //容器內補白&#xff0c;屬于decoration的裝飾范圍Color color, // 背景色Decoration decoration, // 背景裝飾Decoration foregroundDecoration, //前景裝飾double width,//容器的寬…

關于jQuery.query.js 取參數的一個小問題

形如&#xff1a;http://localhost:10864/srch.htm?keys&type1 這樣的地址&#xff0c;如果我們要取keys的參數&#xff1a; var srchKey $.query.get("keys"); 那么得到的將是‘true’ &#xff0c;而不是空客串&#xff0c;這常常不是我們想要的 。 修正辦法…

安卓模擬器獲取服務器信息出錯,安卓模擬器客戶端與服務器不同步

安卓模擬器客戶端與服務器不同步 內容精選換一換目前從本地或虛擬機通過DRS備份遷移功能直接遷移到本云RDS for SQL Server實例上&#xff0c;在遷移完成后還需要針對Login賬號&#xff0c;DBLink&#xff0c;AgentJOB&#xff0c;關鍵配置進行識別&#xff0c;并手動完成相關同…

Blazor University (24)路由 —— 可選路由參數

原文鏈接&#xff1a;https://blazor-university.com/routing/optional-route-parameters/可選路由參數Blazor 不明確支持可選路由參數&#xff0c;但可以通過在組件上添加多個 page 聲明輕松實現等效。例如&#xff0c;更改標準 Counter.razor 頁面以添加額外的 URL。page &qu…

【無人機組裝與調試】第六章 電調、電池、電機

【無人機組裝與調試】系列課程全集: 第一章 概述 第二章 關于新西達30A電調說明書的問題 第三章 舵機安裝與調整 第四章 F450四軸裝機實例-選擇機型、需要的器材工具材料 第五章 無人機遙控器 第六章 電調、電池、電機 一、電調 6.1.1 電調的概念 電調,全稱電子調速器,英…

關于tomcat和sessionCookieName和SESSION_PARAMETER_NAME以及disableURLRewriting參數原理和使用...

關于tomcat和sessionCookieName和SESSION_PARAMETER_NAME以及disableURLRewriting參數 關于session和cookie參考&#xff1a; http://www.blogjava.net/freeman1984/archive/2011/09/02/357833.html http://www.blogjava.net/freeman1984/archive/2010/09/09/331501.html http:…

我讓代碼生了個孩子繼承了他爸爸誰知他爸爸繼承了他爺爺(16)

本系列文章將會以通俗易懂的對話方式進行教學&#xff0c;對話中將涵蓋了新手在學習中的一般問題。此系列將會持續更新&#xff0c;包括別的語言以及實戰都將使用對話的方式進行教學&#xff0c;基礎編程語言教學適用于零基礎小白&#xff0c;之后實戰課程也將會逐步更新。 若…

linux之lrzsz

1、lrzsz介紹 我們利用lrzsz進行windows和linux間的文件上傳下載 2、安裝 在ubuntu系統下 sudo apt-get install lrzsz 在centos系統下 yum install lrzsz 3、使用 1)、windows上傳文件到linux環境,使用如下命令 rz

POJ 1611 The Suspects (并查集)

The Suspects題目鏈接&#xff1a; http://acm.hust.edu.cn/vjudge/contest/123393#problem/B Description 嚴重急性呼吸系統綜合癥( SARS), 一種原因不明的非典型性肺炎,從2003年3月中旬開始被認為是全球威脅。為了減少傳播給別人的機會, 最好的策略是隔離可能的患者。 在Not-…

Android幀緩沖區(Frame Buffer)硬件抽象層(HAL)模塊Gralloc的實現原理分析(2)...

函數load也是實現在文件hardware/libhardware/hardware.c文件中&#xff0c;如下所示&#xff1a; static int load(const char *id, const char *path, const struct hw_module_t **pHmi) { int status; void *handle; struct hw_module_t …

Win8消費者預覽版下載地址 包含中文下載地址及中文手冊

Win8消費者預覽版下載地址&#xff08;32位英文版&#xff09;&#xff1a; http://ak.or.esd.microsoft.com/pr/WCPDL/8A9D4FDFF736C5B1DBF956B89D6C8FDFD925DACD2/Windows8-ConsumerPreview-32bit-English-x1794225.esd Win8消費者預覽版下載地址&#xff08;64位英文版&…

VS2019社區版(Community)試用30天過期的有效解決辦法

VS2019社區版是免費的&#xff0c;前提是你得登陸自己的賬戶&#xff0c;如果一開始安裝時沒有登陸&#xff0c;那么就會只有30天有效期。此時&#xff0c;需要我們登陸微軟賬號&#xff0c;重新驗證即可。 登陸微軟賬號&#xff0c;即可繼續免費試用。

【萬字長文】使用 LSM Tree 思想實現一個 KV 數據庫

目錄設計思路內存表WALSSTable 的結構SSTable 元素和索引的結構SSTable Tree內存中的 SSTable數據查找過程何為 LSM-Treee參考資料整體結構實現過程文件壓縮測試插入測試加載測試查找測試SSTable 結構SSTable 文件結構SSTable Tree 結構和管理 SSTable 文件讀取 SSTable 文件SS…

linux之安裝mysql提示Error: Unable to find a match: mysql-community-server

1 問題 在centos系統下安裝mysql,命令如下 yum -y install mysql-community-server 提示錯誤如下 [root@iZm5e6dk6exl71zbx327zvZ mysql]# yum -y install mysql-community-server MySQL Connectors Community …