当前位置: 首页 > news >正文

.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等

相关文章:

.NET使用Microsoft.IdentityModel.Tokens对SAML2.0登录断言校验

如题。使用SAML单点登录对IDP返回的Response断言使用微软提供的Microsoft.IdentityModel.Tokens对断言(Assertion)进行校验。 首先需要安装Muget包,Microsoft.IdentityModel.Tokens和Microsoft.IdentityModel.Tokens.Saml。 简易示例代码如…...

性能测试学习二

瓶颈的精准判断 TPS曲线 tps图 响应时间图 拐点在哪里呢? 这是一个阶梯式增加的场景,拐点在第二个压力阶梯上就出现了,因为响应时间增加了,tps增加的却不多,在第三个阶段时,tps增加的就更少了,响应时间也在不断增加,所以性能瓶颈在加剧,越往后越明显【tps的增长,…...

小丑的身份证和复印件 (BFS + Floyd)

本题链接:登录—专业IT笔试面试备考平台_牛客网 题目: 样例: 输入 2 10 (JOKERjoke #####asdr) 输出 12 思路: 根据题意,要求最短时间,实际上也可以理解为最短距离。 所以应该联想到有关最短距离的算法&…...

C++类与对象(上)

C类与对象 面向过程和面向对象初步认识类的引入类的定义类的两种定义方式: 类的访问限定符及封装访问限定符 封装类的作用域类的实例化类对象模型如何计算类对象的大小结构体内存对齐规则: this指针 面向过程和面向对象初步认识 C语言是面向过程的&…...

Exchanger的 常用场景及使用示例

Exchanger的 常用场景及使用示例 Exchanger是Java并发包中的一个工具类,它用于两个线程之间交换数据。当两个线程都到达同步点并调用exchange()方法时,它们会交换数据然后继续执行。Exchanger特别适用于那些需要两个线程进行协作,交换数据或…...

Spring AI项目Open AI对话接口开发指导

文章目录 创建Spring AI项目配置项目pom、application文件controller接口开发接口测试 创建Spring AI项目 打开IDEA创建一个新的spring boot项目,填写项目名称和位置,类型选择maven,组、工件、软件包名称可以自定义,JDK选择17即可…...

决策规划仿真平台的搭建

以下内容笔记据来自于b站up主忠厚老实的老王,视频;链接如下: 自动驾驶决策规划算法第二章第一节 决策规划仿真平台搭建_哔哩哔哩_bilibili 使用到的软件有matlab、prescan、carsim以及visual stadio。 我电脑上软件的版本是matlab2022a&am…...

RustGUI学习(iced/iced_aw)之扩展小部件(十八):如何使用badge部件来凸显UI元素?

前言 本专栏是学习Rust的GUI库iced的合集,将介绍iced涉及的各个小部件分别介绍,最后会汇总为一个总的程序。 iced是RustGUI中比较强大的一个,目前处于发展中(即版本可能会改变),本专栏基于版本0.12.1. 概述 这是本专栏的第十八篇,主要讲述badge标记部件的使用,会结合实…...

触摸播放视频,并用iframe实现播放外站视频

效果&#xff1a; html: <div:style"{ height: homedivh }"class"rightOne_content_div_div"mouseenter"divSeenter(i)"mouseleave"divLeave(i)"click"ItemClick(i)"><!-- isUser是否是用户上传 --><divv-if…...

接口自动化-requests库

requests库是用来发送请求的库&#xff0c;本篇用来讲解requests库的基本使用。 1.安装requests库 pip install requests 2.requests库底层方法的调用逻辑 &#xff08;1&#xff09;get / post / put / delete 四种方法底层调用 request方法 注意&#xff1a;data和json都…...

队列的实现与OJ题目解析

"不是你变优秀了, 那个人就会喜欢你." 文章索引 前言1. 什么是队列2. 队列的实现3. OJ题目解析4. 总结 前言 感情可以培养是个伪命题. 如果有足够多的时间和爱, 就可以让另一个人爱上你的话, 那谁和谁都可以相爱了. 爱情之所以会让人死去活来, 是因为, 答案都写在了…...

中北大学软件学院javaweb实验三JSP+JDBC综合实训(一)__数据库记录的增加、查询

目录 1.实验名称2.实验目的3.实验内容4.实验原理或流程图5.实验过程或源代码&#xff08;一&#xff09;编程实现用户的登录与注册功能【步骤1】建立数据库db_news2024和用户表(笔者使用的数据库软件是navicat)【步骤2】实现用户注册登录功能(与上一实验报告不同的是&#xff0…...

高通QCS6490开发(一): 广翼智联FV01 AI板卡简介

《高通QCS6490开发》是一系列AIoT应用开发文章&#xff0c;我们将会在系列文章中陆续介绍基于QCS6490平台上的AIoT应用开发&#xff0c;在文章中&#xff0c;我们选择了广翼智联&#xff08;FAIOT&#xff09;公司的FV01产品作为开发板&#xff0c;介绍如何从底层的硬件板卡接线…...

【知识拓展】大白话说清楚:IP地址、子网掩码、网关、DNS等

前言 工作中常听别人说的本地网络是什么意思&#xff1f;同一网段又是什么意思&#xff1f;它俩有关系吗&#xff1f; 在工作中内经常会遇到相关的网络问题&#xff0c;涉及网络通信中一些常见的词汇&#xff0c;如IP地址、子网掩码、网关和DNS等。具体一点&#xff1a;经常会…...

Java 高级面试问题及答案2

Java 高级面试问题及答案 问题 1: 请解释 Java 中的多线程和并发的区别&#xff0c;并举例说明如何避免常见的并发问题。 答案&#xff1a; 多线程是指程序中有多个线程同时执行&#xff0c;而并发是指程序设计中允许多个操作看起来是同时执行的&#xff0c;即使它们可能不是…...

2024年网络安全威胁

随着2024年的到来&#xff0c;数字世界的版图正在以前所未有的速度扩张&#xff0c;引领我们进入一个技术革新的新时代。然而&#xff0c;这飞速的发展同时也催生了一系列错综复杂的网络安全挑战。在这个数字平台与我们生活日益紧密交织的时代&#xff0c;深入了解这些新兴的威…...

应用层之 HTTP 协议

HTTP 协议 HTTP (全称为 "超文本传输协议") 是一种应用非常广泛的 应用层协议。所谓 "超文本" 的含义, 就是传输的内容不仅仅是文本(比如 html, css 这个就是文本), 还可以是一些 其他的资源, 比如图片, 视频, 音频等二进制的数据。浏览器获取到网页&#…...

解决Word文档中页眉有部分有,有部分没有的问题

问题描述&#xff1a;一个Word文档中&#xff0c;在页眉上添加文档名称和页码&#xff0c;但是有的有&#xff0c;有的没有&#xff0c;选择“链接到前一节”也无法解决该问题。 原因分析&#xff1a;页眉页脚中&#xff0c;勾选了“首页不同”的选项&#xff0c;如下图&#…...

Python爬虫基础知识学习(以爬取某二手房数据、某博数据与某红薯(书)评论数据为例)

一、爬虫基础流程 爬虫的过程模块化&#xff0c;基本上可以归纳为以下几个步骤&#xff1a; 1、分析网页URL&#xff1a;打开你想要爬取数据的网站&#xff0c;然后寻找真实的页面数据URL地址&#xff1b; 2、请求网页数据&#xff1a;模拟请求网页数据&#xff0c;这里我们介…...

JavaScript-输入输出语句

输出语句 document.write( 输出的内容 ) 语法&#xff1a;document.write( 输出的内容) 作用&#xff1a;内容会显示在网页上 如果输出的内容是标签&#xff0c;也会被解析为网页元素 代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head>&…...

Hermes Agent框架对接Taotoken自定义供应商的配置指南

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Hermes Agent框架对接Taotoken自定义供应商的配置指南 对于使用Hermes Agent框架的开发者而言&#xff0c;能够灵活接入不同的模型…...

SAP PP实战解析:MPS(主生产计划)如何成为供需平衡的“定海神针”?

1. 为什么企业需要MPS这根"定海神针"&#xff1f; 想象一下你正在经营一家汽车制造厂。周一销售部突然接到500辆车的加急订单&#xff0c;周三又被告知原定300辆的订单要取消。如果直接根据这些波动安排生产&#xff0c;车间可能周一忙到通宵&#xff0c;周三却闲置停…...

一文读懂现代城市照明:从亮化到数字化的行业升级指南

当前照明行业早已脱离单纯"亮起来"的初级阶段&#xff0c;正在向场景化、数字化、低碳化方向快速迭代&#xff0c;很多客户在选择照明服务商时往往对行业标准、技术趋势了解不足&#xff0c;导致项目效果与预期存在差距。行业升级的核心方向&#xff1a;从单一照明到…...

Perplexity图标搜索效率提升300%:从零配置到精准获取的5步实战工作流

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;Perplexity图标资源搜索 在构建与 Perplexity AI 集成的前端应用或开发调试工具时&#xff0c;获取其官方图标资源是品牌一致性与用户体验的关键环节。Perplexity 官方未提供公开的图标下载中心&#xff0c;但…...

从NOIP到CSP:信息学奥赛初赛这15年真题,我帮你划出了重点考点变迁

信息学奥赛初赛15年考纲演进&#xff1a;从NOIP到CSP的考点变迁与备考策略 翻开2007年NOIP普及组的初赛试卷&#xff0c;再对比2022年CSP-J/S的真题&#xff0c;你会惊讶地发现&#xff1a;同样是"入门级"考试&#xff0c;题目考察的维度和深度已经发生了翻天覆地的变…...

Perplexity国际新闻搜索深度解析(全球记者都在用的AI情报工作流)

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;Perplexity国际新闻搜索深度解析&#xff08;全球记者都在用的AI情报工作流&#xff09; Perplexity 不仅是问答引擎&#xff0c;更是现代调查记者与情报分析师的“实时新闻雷达”。其核心优势在于融合权威信…...

【免费下载】 MATLAB 3D 极坐标绘图示例:天线三维方向图【matlab下载】

MATLAB 3D 极坐标绘图示例&#xff1a;天线三维方向图 项目介绍 在科学计算和工程设计领域&#xff0c;MATLAB一直是数据可视化和仿真的强大工具。然而&#xff0c;当涉及到在三维空间中使用极坐标系统进行绘图时&#xff0c;MATLAB的标准绘图函数如surf和mesh就显得力不从心。…...

Apple Music断供后歌单全没?别慌!用iTunes导出的XML文件+Excel手动抢救歌单(保姆级图文教程)

Apple Music断供后歌单全没&#xff1f;别慌&#xff01;用iTunes导出的XML文件Excel手动抢救歌单&#xff08;保姆级图文教程&#xff09; 当你发现Apple Music因断供导致精心收藏的歌单全部消失时&#xff0c;那种心情就像突然失去了多年的音乐记忆。别担心&#xff0c;这份…...

长期使用聚合API平台,对账单清晰度与费用追溯的满意度反馈

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 长期使用聚合API平台&#xff0c;对账单清晰度与费用追溯的满意度反馈 作为一名长期负责项目维护的开发者&#xff0c;我所在团队在…...

群晖Docker部署iptv-m3u-maker保姆级教程:自动检测直播源,告别失效频道

群晖NAS上打造智能IPTV系统&#xff1a;Docker容器化部署与自动化直播源管理实战 在家庭媒体中心搭建领域&#xff0c;群晖NAS凭借其出色的硬件性能和灵活的软件生态&#xff0c;已成为众多技术爱好者的首选平台。而将IPTV服务整合进NAS系统&#xff0c;不仅能实现传统电视节目…...