技术分享|明源云天际集成开放平台接口中心基于IdentityServer4的鉴权机制
源寶導讀:企業數字化生態建設中為解決集成多樣性和資源統一管理的痛點引入企業級網關,網關作為資源訪問的大門,身份認證鑒權是其業務的重中之重,本文將介紹企業級網關-天際集成開放平臺是如何通過IdentityServer4來做到身份認證和鑒權業務的。
天際集成開放平臺業務簡述
明源云天際集成開放平臺(以下簡稱“集成平臺”)是明源打造的一套高可用、高并發、高性能的企業網關,是解決企業數字化生態打造中的資源連接多樣性和資源生態管理困難等痛點。企業周邊生態復雜多樣,各種業務系統層出不窮,給資源的統一管理和連接帶來了巨大的挑戰。
集成平臺采用分布式系統架構,來應對挑戰。由接口中心、連接中心、事件中心、門戶、監控中心、服務流ETL和方案中心等組成(如圖1所示),其中接口中心是系統的統一入口,負責資源的管理,所有的請求都由接口中心來轉發處理,其他中心負責其相關核心業務。
結合這次分享的主題,我將對接口中心基于IdentityServer4的鑒權機制進行詳細的分享,其他業務將在后續的文章中體現,敬請期待。
(圖1)
IdentityServer4 徽標
IdentityServer4 介紹
IdentityServer4框架,是為ASP.NET CORE量身定制的實現了?OpenID Connect?和?OAuth 2.0?的認證授權中間件。
IdentityServer4 官方支持時間和商業許可
IdentityServer4 官方錯誤修復和安全更新的維護時間直到2022年11月。
IdentityServer4 使用?Apache2?許可的許可證,該許可證允許在其之上構建商業產品。
一、概述
由于接口中心的特殊定位,使其還兼顧著網關相關的安全策略和統一業務處理。在接口中心的設計上選擇了.NET生態中一套非常成熟的網關設計方案 Ocelot + Consul + IdentityServer4,集成平臺基于自身業務的需要在Ocelot的運行管道中進行了相關中間件的擴展,如圖2所示。其中Api鑒權中心中間件的設計便是結合了IdentityServer4相關技術來進行打造的。
集成平臺為客戶連接一切可連接的資源,用戶在將資源進行上線管理時,擔憂的是安全問題、訪問權限問題。針對這兩點,首先我們提供了統一的網關入口,建議用戶將資源放在內網,隔絕外網直接訪問資源,然后針對需要獲取客戶資源的第三方用戶,提供網關的Token頒發地址,目前我們支持三種獲取Token的接口,分別為 JWT(Json web token)、OAuth2.0 Client、OAuth2.0 Sign。在平臺上客戶會給第三方添加應用,為應用分配AppKey和AppSecret,第三方用戶拿到AppKey和AppSecret來請求Token獲取令牌。在給第三方應用頒發Token時,會將授權資源信息保存起來,供身份認證通過后,進行資源授權校驗,綜上所述,如圖3所示。
為了更好讓大家理解 IdentityServer4 下面將對它進行詳細的說明,并結合集成平臺的身份認證授權案列來進行闡述。
(圖2)
(圖3)
二、相關術語解釋
① User:用戶
② Client:客戶端
③ Resources:Identity Data(身份數據)、Apis
④ Identity Server:認證授權服務器
⑤ Token:Access Token(訪問令牌)和 Identity Token(身份令牌)
⑥ JWT:Json web token 詳情請看JWT官網
三、OAuth2.0和OpenId Connect協議理解
定義:OAuth(開放授權)是一個開放標準,目前的版本是2.0。允許用戶授權第三方移動應用訪問他們存儲在其他服務商上存儲的私密的資源(如照片,視頻,聯系人列表),而無需將用戶名和密碼提供給第三方應用。OAuth允許用戶提供一個令牌而不是用戶名和密碼來訪問他們存放在特定服務商上的數據。每一個令牌授權一個特定的網站內訪問特定的資源(例如僅僅是某一相冊中的視頻)。這樣,OAuth可以允許用戶授權第三方網站訪問他們存儲在另外服務提供者的某些特定信息,而非所有內容。
1、OAuth2.0 定義了四種授權模式:
(1)Implicit:簡化模式;直接通過瀏覽器的鏈接跳轉申請令牌。
(A)客戶端攜帶client_id、redirect_uri,中間通過代理者訪問授權服務器,如果已經登錄過會直接返回redirect_uri,沒有登錄過就跳轉到登錄頁面
(B)授權服務器對客戶端進行身份驗證(通過用戶代理,讓用戶輸入用戶名和密碼)
(C)授權通過,會重定向到redirect_uri并攜帶授權碼token作為uri參數
(D)客戶端攜帶授權碼訪問資源服務器
(E)驗證token通過,返回資源
(圖4)
(2)Client Credentials:客戶端憑證模式,是最簡單的授權模式,因為授權的流程僅發生在Client與Identity Server之間。該模式的適用場景為服務器與服務器之間的通信。比如對于一個房地產ERP系統,將房產庫存和銷售分拆為兩個服務分別部署。銷售系統需要訪問庫存系統進行房間的跟蹤,庫存系統需要訪問銷售系統的銷售單號信息進行房間信息的定時刷新。而這兩個系統之間服務的授權就可以通過這種模式來實現。
(圖5)
(3)Resource Owner Password Credentials:密碼模式相較于客戶端憑證模式,多了一個參與者,就是User(資源所有者)。通過User的用戶名和密碼向Identity Server申請訪問令牌。這種模式下要求客戶端不得儲存密碼。但我們并不能確??蛻舳耸欠駜Υ媪嗣艽a,所以該模式僅適用于受信任的客戶端。否則會發生密碼泄露的危險。該模式不推薦使用。
(圖6)
(4)Authorization Code:授權碼模式是一種混合模式,是目前功能最完整、流程最嚴密的授權模式。它主要分為兩大步驟:認證和授權。其流程為:
(A)用戶訪問客戶端,客戶端將用戶導向Identity Server。
(B)用戶填寫憑證信息向客戶端授權,認證服務器根據客戶端指定的重定向URI,并返回一個【Authorization Code】給客戶端。
(C)客戶端根據【Authorization Code】向Identity Server申請【Access Token】
(圖7)
(二)OpenId Connect用于授權身份認證
定義:OpenID Connect 1.0 是基于OAuth 2.0協議之上的簡單身份層,它允許客戶端根據授權服務器的認證結果最終確認終端用戶的身份,以及獲取基本的用戶信息;它支持包括Web、移動、JavaScript在內的所有客戶端類型去請求和接收終端用戶信息和身份認證會話信息;它是可擴展的協議,允許你使用某些可選功能,如身份數據加密、OpenID提供商發現、會話管理等。
(三)JWT 理解
我們使用的Token格式為JWT(Json web token)。其特殊的三段式結構結合簽名的方式,使Token更加的安全和可讀(頭部和有效載荷都為Base64URl加碼)。而且這種類型的Token的特點非常適合Http無狀態的方式,讓分布式的系統通過Jwt來作為身份和認證的統一令牌,讓服務器無狀態,無關聯影響。
四、集成平臺身份認證授權案例
在前言中提到我們在Ocelot網關的管道中擴展很多自己的業務管道,其中就包含了平臺的身份認證授權中間件,其實在Ocelot中是有內置的中間件的,為什么我們要自己實現一套中間呢?首先我們作為企業網關,除了要兼容標準的各種驗證方式,以及兼容替換其他第三方網關的認證方式,還要結合我們明源自己的軟件產品生態,比如兼容云客、云空間的身份認證模式等等,由于Ocelot自身沒辦法滿足我們特殊定制的需要,所以自己實現了一套基于Ocelot管道的身份認證。
IdentityService4作為獨立的認證服務,必須要知道哪些資源需要配置和保護,也必須知道哪些客戶端被允許訪問資源,我們在概述中提到了集成平臺的身份認證驗證過程圖3所示,首先在集成平臺的云控制臺添加資源,然后根據不同的訪問系統創建應用信息并頒發AppKey和AppSecret。資源和應用的對應關系我們實例化在數據庫中,并把資源和應用的綁定關系同步在Consul KV中,在調用的時候系統首先獲取到Token然后攜帶Token并來到集成平臺網關,通過目前Api請求Token和認證方式,進行Token身份認證,認證通過后將通過Api的唯一標識從Consul KV中獲取對應關系,進行授權認證。那數據庫中持久化的關系和Consul KV 中的數據怎么保證一致性呢?首先在集成平臺云端控制臺進行授權配置的時候采用事務的方式來保證數據庫和Consul中的數據一致性,并采用Consul 的KV變更監控來防止直接修改信息導致的數據不一致性。下面是集成平臺網關相關配置的幾個點。
(1) 首先配置允許授權頒發Token令牌接口匿名訪問,集成平臺目前實現了三種驗證方式并提供了獲取令牌的接口。
(圖8)
如下圖,提供的OAuth2.0 客戶端的認證模式獲取Token接口,會在集成平臺的云控平臺為需要訪問資源的第三方,建立應用并分配可訪問資源權限,第三方拿到應用Appkey和AppSecret后進行登錄獲取Token。
(圖9)
如下圖:Json web token 頒發的核心代碼
(圖10)
(2)我們使用Ocelot作為網關,并在Ocelot網關管道中進行業務改造,這里我們也是編排身份驗證中間件到管道中。
(圖11)
(圖12)
(圖14)
五、總結
IdentityServer4 實現了OAuth2.0的四種身份認證方案,大家可以結合自己的業務場景,來選擇適合系統業務的身份認證授權的方式,集成平臺為了兼容多種客戶的需求,目前實現了三種不同的驗證方式,OAuth2.0客戶端模式、JWT認證模式、OAuth2.0簽名模式。
在我看來,身份認證和授權的選擇,首先考慮自己的系統是無狀態還是需要維護登錄狀態,然后結合業務的場景,考慮身份認證授權方案,最終將選型的方案,添加到管道中進行編排。
六、參考文章
官方
@Identityserver4網站:https://identityserver4.readthedocs.io/en/latest/index.html
@OpenID Connect 網站:https://openid.net/connect/
@OAuth 2.0 網站:https://oauth.net/2/
博客園
@作者 圣杰 文章:IdentityServer 4 知多少 :https://www.cnblogs.com/sheng-jie/p/9430920.html
@IdentityService4 百度腦圖?https://naotu.baidu.com/file/75b251257ce27cfa62e0ad7f47b75576?token=e2db617be22b6274
------ END ------
作者簡介
顧同學:?研發工程師,目前負責集成平臺相關研發工作。
也許您還想看:
技術分享|單元測試推廣與實戰-在全新的DDD架構上進行單元測試
技術分享|文件預覽方案在應用市場的落地
更多明源云·天際開放平臺場景案例與開發小知識,可以關注明源云天際開發者社區公眾號:
【建?!吭诰€編碼--SetProp/GetProp方法使用
明源云·天際硬核技術認可:獲華為鯤鵬技術認證書
天際·開發者社區“重裝發布”!
總結
以上是生活随笔為你收集整理的技术分享|明源云天际集成开放平台接口中心基于IdentityServer4的鉴权机制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 理论修炼之RabbitMQ,消息队列服务
- 下一篇: 码农身份得到正式认证