.NET使用Microsoft.IdentityModel.Tokens對SAML2.0登錄斷言校驗

?如題。使用SAML單點登錄對IDP返回的Response斷言使用微軟提供的Microsoft.IdentityModel.Tokens對斷言(Assertion)進行校驗。

首先需要安裝Muget包,Microsoft.IdentityModel.Tokens和Microsoft.IdentityModel.Tokens.Saml。

簡易示例代碼如下:

private X509SecurityKey GetSigningCertificate()
{//SAMLResponse ds:X509Data節點證書信息string samlCertificate = @"MIIC8DCCAdigAwIBAgIQY97pbBoha5tHlCRNbt64bjANBgkqhkiG9w0BAQsFADA0MTIwMAYDVQQDEylNaWNyb3NEiy9NIRqat894uFw2sxSlEe2zOSI1jBQVkI0qu/fAFEG/cK9/SMQ40f8/aLalWU6i2x5k3pslmuf1DN76mCIImBNxGBqtWKkRWZTuxbJ0zay70owDfS4JKsz";byte[] certBytes = Convert.FromBase64String(samlCertificate);X509Certificate2 certificate = new X509Certificate2(certBytes);//如果將證書安裝在服務器,也可以調用證書,注意替換證書指紋// 加載用于驗證簽名的證書//var store = new X509Store(StoreName.My, StoreLocation.LocalMachine);//store.Open(OpenFlags.ReadOnly);//var certs = store.Certificates.Find(X509FindType.FindByThumbprint, "證書指紋", false);//store.Close();//if (certs.Count == 0)//    throw new Exception("Signing certificate not found.");//var key = new X509SecurityKey(certs[0]);var key = new X509SecurityKey(certificate);return key;
}public bool ValidateSamlAssertionSignature()
{string samlAssertion = Request.Form["SAMLResponse"].ToString();byte[] samlResponseBytes = Convert.FromBase64String(samlAssertion);// 將字節數組轉換為 XML 文檔XmlDocument samlResponseDoc = new XmlDocument();samlResponseDoc.Load(new MemoryStream(samlResponseBytes));// 從 SAML Response 中提取 Assertion 節點XmlNode assertionNode = samlResponseDoc.SelectSingleNode("//*[local-name()='Assertion' and namespace-uri()='urn:oasis:names:tc:SAML:2.0:assertion']");var tokenHandler = new Saml2SecurityTokenHandler();var validationParameters = new TokenValidationParameters{ValidateIssuer = true, // 根據需要設置ValidIssuer = "IDP提供的標識符",//Issuer節點ValidateAudience = false, // 根據需要設置ValidAudience= "你的EntityID",// 從證書存儲中獲取用于驗證簽名的證書IssuerSigningKey = GetSigningCertificate(),ValidateLifetime = true // 驗證令牌是否在有效期內//以及其他校驗點};try{//返回登錄者信息,進行下一步處理ClaimsPrincipal securityToken = tokenHandler.ValidateToken(assertionNode.OuterXml, validationParameters, out var rawToken);var samlToken = rawToken as Saml2SecurityToken;// 驗證成功,samlToken 包含斷言信息,正常應該跳轉到登錄成功頁面return true;}catch (SecurityTokenValidationException){// 驗證失敗return false;}
}

也可以使用開源的saml庫。比如AspNetSaml,ITfoxtec.Identity.Saml2以及Sustainsys.Saml2等

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

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

相關文章

手機自養號測評系統:專業應對電商平臺風控,提升賬號穩定性

用手機做自養號測評它具備無限生成不同真實手機底層環境的能力,每個環境都相當于一臺全新的手機設備。通過先進的底層屏蔽技術,我們成功讓亞馬遜等平臺僅能檢測到我們預設的參數,如手機型號、內存、lMEI、序列號、MAC地址以及運營商信息等。每…

Stable Diffusion超詳細教程!本地部署 Stable Diffusion

前言 目前市面上比較權威,并能用于工作中的AI繪畫軟件其實就兩款: Midjourney(MJ)Stable-Diffusion(SD) MJ需要付費使用,而SD開源免費,但是上手難度和學習成本略大,并…

變色龍還是樹懶:揭示大型語言模型在知識沖突中的行為

你是知識變色龍還是樹懶?我今天在ICLR學到一個很有趣的術語,叫做證據順序(order of evidence)。 大模型RAG處理知識沖突的探討: 在檢索增強生成(Retrieval-Augmented Generation, RAG)的過程中,技術團隊會將檢索到的前幾名文檔作為證據,并提示(prompt)給大型語言模型(Large La…

電巢直播XR鑒賞|一塊綠幕,閃現進入異星戰爭的現場!

XR場景賞析 在浩瀚的宇宙深處,一顆神秘莫測的異星球映入我們的眼簾,這里,龍卷風與炮火交織,似乎永不停歇。 星球表面散布著無數的飛船殘骸,它們是某場宇宙大戰殘酷的遺存,無聲地訴說著過往的激烈沖突。地面…

LeetCode 3題:無重復字符的最長子串(原創)

【題目描述】 給定一個字符串 s ,請你找出其中不含有重復字符的 最長子串的長度。 示例 1: 輸入: s "abcabcbb" 輸出: 3 解釋: 因為無重復字符的最長子串是 "abc",所以其長度為 3。示例 2: 輸入: s "bbbbb" 輸出…

Dalsa windows10下安裝流程及部分問題分析

文章目錄 安裝及依賴庫說明切換驅動模式流程問題:通過Dalsa SDK開發后找不到相機?問題:找不到采集卡? 安裝及依賴庫說明 官網(https://www.teledynedalsa.com/en/support/downloads-center/)下載的最新文件(20240515&…

Leetcode 404:左葉子之和

給定二叉樹的根節點 root ,返回所有左葉子之和。 思路:遍歷樹,尋找左葉子節點; 如果判斷是左葉子節點,就更新sum。 public static int sumOfLeftLeaves(TreeNode root){int sum0;sumcompute(root,sum);return sum;}/…

Elasticsearch 8.1官網文檔梳理 - 十四、Query DSL(ES 查詢語法)

Query DSL Elasticsearch 提供了一種基于JSON 的查詢 DSL (Domain Specific Language) 來定義查詢。可以把查詢 DSL 看作是查詢的 AST(Abstract Syntax Tree),由兩種類型的子句組成: 葉子節點查詢: 葉子查詢子句在特定字段中查找特定值&…

Flutter 中的 DrawerHeader 小部件:全面指南

Flutter 中的 DrawerHeader 小部件:全面指南 在 Flutter 的 Drawer 組件中,DrawerHeader 是一個特殊的部件,用于在抽屜的頂部顯示,通常包含應用的標志、用戶信息、標題或其他重要的視覺元素。DrawerHeader 可以作為一個視覺分隔符…

Vue3 報v-bind is missing expression.vue(34)錯誤的解決方案

一、項目環境 node.js 版本&#xff1a;node-v20.11.1-x64 vscode版本&#xff1a;version 1.89 錯誤截圖 二、可能原因解決方案 2.1 v-bind 與 :src之間存在空格 錯誤示例&#xff1a; <img v-bind :src"imgurl" /> 如果有在 :src 前面寫了 v-bind&…

使用Pixi.js 圖片切換特效(圖片分段下滑以及復原)

1.效果: 2.實現原理: 將圖片按寬高切分為x*y(具體可以自己調整)個矩形區域&#xff0c;對每個頂點分配一個隨機值noiseValue(-1到1之間),在頂點著色器中根據這個隨機值而做出不同的y軸位移效果從而實現出分段的下滑或者復原的效果。 3.代碼實現: 首先是頂點著色器的代碼,其中…

C++ lambda表達式詳解

C lambda表達式詳解 C11 lambda表達式精講 [ capture ] ( params ) opt -> ret { body; };capture 是捕獲列表&#xff0c;params 是參數表&#xff0c;opt 是函數選項&#xff0c;ret 是返回值類型&#xff0c;body是函數體 一個完整的 lambda 表達式看起來像這樣&#xf…

醫院污水一體化處理設備有哪些

醫院污水一體化處理設備通常包括以下幾個主要組件&#xff1a; 預處理單元&#xff1a;用于去除污水中的固體懸浮物、顆粒物、油脂等&#xff0c;常見的預處理單元包括格柵、沉砂池、油水分離器等。生物處理單元&#xff1a;用于降解有機物質和去除氮、磷等營養物質。常見的生物…

7D-RESAR性能工程:術語表

文章目錄 1. 前言1.1. 編寫目的1.2. 適應范圍與對象 2. 術語表2.1. RESAR性能工程2.2. 性能測試2.3. 性能項目2.4. 性能項目方案2.5. 性能項目計劃2.6. 性能需求類術語2.6.1. 性能需求/指標2.6.2. 并發用戶2.6.3. 在線用戶2.6.4. 并發度&#xff08;并發率&#xff09;2.6.5. 事…

Kubernetes進階對象Deployment、DaemonSet、Service

Deployment Pod 在 YAML 里使用“containers”就可以任意編排容器&#xff0c;而且還有一個“restartPolicy”字段&#xff0c;默認值就是 Always&#xff0c;可以監控 Pod 里容器的狀態&#xff0c;一旦發生異常&#xff0c;就會自動重啟容器。 不過&#xff0c;“restartPo…

Java小游戲之湯姆貓

背景&#xff1a; 博主寫過羊了個羊小游戲&#xff0c;客戶覺得羊了個羊同學寫過了&#xff0c;想換一個&#xff0c;于是筆者想到了湯姆貓。就是那個以前在蘋果手機上的貓。 過程&#xff1a; 初始會有一個貓的圖片展示&#xff0c;然后你點擊按鈕&#xff0c;貓會有不同動作…

C++進階之路:何為默認構造函數與析構函數(類與對象_中篇)

?? 歡迎大家來訪Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭?&#xff5e;?? &#x1f31f;&#x1f31f; 歡迎各位親愛的讀者&#xff0c;感謝你們抽出寶貴的時間來閱讀我的文章。 我是Srlua小謝&#xff0c;在這里我會分享我的知識和經驗。&am…

Web3與物聯網:構建智能連接的數字世界

引言 隨著互聯網的不斷發展&#xff0c;物聯網&#xff08;Internet of Things, IoT&#xff09;作為一種新興的信息技術&#xff0c;正在逐漸滲透到我們的生活和工作中。而隨著Web3的興起&#xff0c;物聯網將迎來新的發展機遇。本文將探討Web3與物聯網的結合&#xff0c;如何…

如何在職場中構建穩固地位:持續學習、拓展人脈與職業規劃

在日益激烈的職場競爭中&#xff0c;保持一種穩健且前瞻性的狀態是至關重要的&#xff0c;它可以幫助我們在各種“裁員潮”中保持相對安全的位置。以下是一些建議&#xff0c;幫助我們判斷和維持在職場中的安全位置&#xff1a; 首先&#xff0c;持續學習和提升技能是關鍵。職場…

2024年NOC大賽創客智慧(西瓜創客)圖形化復賽編程真題模擬試卷包含答案

NOC 復賽圖形化模擬題 【題目要求】 1、添加角色小貓和“Balloon1”角色氣球(大小 70) 2、添加背景“Boardwalk” 3、點擊綠旗,角色初始位置如圖,小貓從舞臺左側出發,向舞臺右 側移動,移動過程中不斷切換造型 4、當小貓碰到氣球角色,小貓停止移動,氣球逐漸向舞臺上方…