SAML 流程讲解

article/2025/9/14 9:47:51

SAML(Security Assert Mark Language)常用来实现SSO。

本文主要梳理一下SAML的代码逻辑

术语讲解:

   IDP: Identity provider  在单点登陆中是指统一身份认证平台。

  SP:Service Provider  在单点登陆中是指需要被认证的服务方。

  Assert: 断言,是指IDP 认证用户后,发送认证结果给SP的一种形式。

实验场景:  web程序testSp 是SP

                    web程序testIdp是IDP

         用户通过浏览器访问SP服务中的某个资源(JSP页面),这时候SP会校验请求中是否有认证信息,如果没有,将会重定向页面到IDP的身份认证页面。然后IDP方认证成功后,会将认证结果以断言的形式发送给SP,然后SP方通过检验断言的签名以保证断言的有效性,最后将页面重新重定向到SP访问资源的页面。

具体场景

  1.用户通过浏览器访问SP端的资源,如访问http://www.obito-sp.com:8080/testSp/index.jsp

         代码中通过filter来拦截该请求,然后判断该请求中是否有认证信息。如果有认证信息,说明该用户已经认证通过的,直接放行,然后没有认证信息,则页面重定向。这里重定向不是简单的重定向,而是需要带上一个AuthnRequest参数到重定向的页面。其中AuthnReqeust如下

<?xml version="1.0" encoding="UTF-8"?>
<saml2p:AuthnRequest xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol" AssertionConsumerServiceURL="http://www.obito-sp.com:8080/testSp/assertConsumer" Destination="http://www.obito-idp.com:8080/testIdp/ssologin" ID="_a4984546052a64544d9761fbb4c24021" IssueInstant="2019-04-18T05:49:09.215Z" ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact" Version="2.0"><saml2:Issuer xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion">Obito_SP</saml2:Issuer><saml2p:NameIDPolicy AllowCreate="true" Format="urn:oasis:names:tc:SAML:2.0:nameid- format:transient"/><saml2p:RequestedAuthnContext Comparison="minimum"><saml2:AuthnContextClassRef xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion">urn:oasis:names:tc:SAML:2.0:ac:classes:Password</saml2:AuthnContextClassRef></saml2p:RequestedAuthnContext>
</saml2p:AuthnRequest>

其中 AssertionConsumerServiceURL是指IDP将断言发送给SP的地址。

Destination是指重定向的地址,IssueInstant是指生成AuthnRequst请求的时间。

ProtocolBinding是指IDP通过什么方式将断言发送给SP。 HTTP-Artifact是指IDP会发送一个artifact number给SP,然后SP会直接和IDP建立连接,而不是走浏览器继续重定向,然后IDP再把真正的断言发给SP。

2.用户访问资源的请求中没有带认证信息,会重定向到IDP,重定向的地址为http://www.obito-idp.com:8080/testIdp/ssologin

同时会将第一步中的AuthnRequest进行编码,以参数的形式附加到重定向的地址中。这里代码没有对AuthRequest的内容进行核查。只是代码以后需要改进的。

3.IDP这边进行身份认证,如果认证通过,会发送一个artifact number给SP,当然还是以重定向的方式,artifact number也是以参数的形式附加到重定向地址的后面,这里重定向的地址就是AssertionConsumerServiceURL的地址。

4.SP收到artifact后,会和SP重新建立连接,这里可以是通过SOAP 方式,然后发送一个 ArtifactResolve,具体格式如下:   

 <?xml version="1.0" encoding="UTF-8"?><saml2p:ArtifactResolve xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol" Destination="http://www.obito-idp.com:8080/testIdp/artifactResolution" ID="_c0b46eb67d9ca146041085b85533a810" IssueInstant="2019-04-18T12:32:27.352Z" Version="2.0">
<saml2:Issuer xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion">Obito_SP</saml2:Issuer>
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
<ds:Reference URI="#_c0b46eb67d9ca146041085b85533a810">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
<ds:DigestValue>/J7WshhksMlDoGLTxeY0kJZwDdGrsowJjH4oBrrGBWE=</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>
LpQW3elUlnNNWDq1dMgEIH1kDGHG7ZLXtuTyiHn4QaQKQW6hq7PzxNJRxCcA6oEQZ7oXdWW33fBR
SPV1uvbz+nurUbn0NFu3aPxqHME/xdSCw7/HByKGq3r2oxaSlIUKReaDv2/uJt9kzP3lrokAVxIb
0oWIri2oXtpKdZrUzZUPW468ptH5fT8kCeym/Iz2coIE6hIjav2wfSpGipxqeysolI7zCXQITJ39
suS8QVDqf4Dyqb1t7GicklHGp2RYCc+py0y9WC+RXFreXa5us3Z7yUdB6wCdCau7OTQzZuVZS8gy
PJwoqiPLnkT4tYTebHfoue1uzAW7zR5TbNutNA==
</ds:SignatureValue>
</ds:Signature>
<saml2p:Artifact>AAQAAMFbLinlXaCM+FIxiDwGOLAy2T71gbpO7ZhNzAgEANlB90ECfpNEVLg=</saml2p:Artifact>
</saml2p:ArtifactResolve>

   5.IDP收到ArtifactResolve后,会进行签名认证,认证通过后,会将真正的断言发送给SP,当前发送的断言也会进行加密和签名的。具体格式如下:

加密的形式

<?xml version="1.0" encoding="UTF-8"?><saml2p:ArtifactResponse xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol" Destination="http://www.obito-sp.com:8080/testSp/assertConsumer" ID="_57be1dfd2390140014252d63fbe7e53e" IssueInstant="2019-04-18T12:32:51.902Z" Version="2.0">
<saml2:Issuer xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion">Obito_IDP</saml2:Issuer>
<saml2p:Status>
<saml2p:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>
</saml2p:Status>
<saml2p:Response Destination="http://www.obito-sp.com:8080/testSp/assertConsumer" ID="_4d5434a7332712508a285a50d3e2b867" IssueInstant="2019-04-18T12:32:51.933Z" Version="2.0">
<saml2:Issuer xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion">Obito_IDP</saml2:Issuer>
<saml2p:Status>
<saml2p:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>
</saml2p:Status>
<saml2:EncryptedAssertion xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion">
<xenc:EncryptedData xmlns:xenc="http://www.w3.org/2001/04/xmlenc#" Id="_67b20d63719babf2541fb26826fa85f1" Type="http://www.w3.org/2001/04/xmlenc#Element">
<xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes128-cbc"/>
<ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<xenc:EncryptedKey Id="_cba2ee6d6b6a09dcade545e4e99b50a6">
<xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p">
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
</xenc:EncryptionMethod>
<xenc:CipherData>
<xenc:CipherValue>ipefLOccEjX+uoi4t6MtJjNOiDpIkop/ISD5YSQ8JM9+cyJu8IpZ83CxMHIIddJ1729jLf7NPtGsQgElXrrG1KRvWn6M0X1jrf5NYdnpFtakX02JhYL9I8sfuEMUevvS6TKqSJLRXzUTkAu/cpjSjAPzVUtA+3fi+5tT940vi6vLxVuRZEtLiMRm8vMb5r9wSIlY4LhMJR1CYMX19IMJHUEdJLLed3r8uvO1u+jGXf6IdHajfJAo7hFL5k5xYGn0K11uJNSpzjbnkfMzRhTg9EK4iMs0bnwvmEebA+TUnrh8o5IvPFzypBSUt8lTdoz2S7tOmSVCaeaB2v1ov8zZBw==</xenc:CipherValue>
</xenc:CipherData>
</xenc:EncryptedKey>
</ds:KeyInfo>
<xenc:CipherData>
<xenc:CipherValue>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</xenc:CipherValue>
</xenc:CipherData>
</xenc:EncryptedData>
</saml2:EncryptedAssertion>
</saml2p:Response>
</saml2p:ArtifactResponse>

  解密后断言的形式

  

<?xml version="1.0" encoding="UTF-8"?><saml2:Assertion xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" xmlns:xsd="http://www.w3.org/2001/XMLSchema" ID="_d4e8e48ad6370bee9083f18b0d76348b" IssueInstant="2019-04-18T12:32:51.934Z" Version="2.0">
<saml2:Issuer>Obito_IDP</saml2:Issuer>
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<ds:Reference URI="#_d4e8e48ad6370bee9083f18b0d76348b">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
<ec:InclusiveNamespaces xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#" PrefixList="xsd"/>
</ds:Transform>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
<ds:DigestValue>z4lm06crUP0qlVvRnb2x2A7DKhL9HduxqWUICnsZv/E=</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>E+TMPkFdgX67Sbfx3jBXq7Bol4AvnRYQDHoGhbn6F9EzGG0C5BaPqaumUDeuiA7v2I+wG600wnumTakLu6ZAsiDP0RMj/ZrOR2ZpFwTRRLKa4ITwX26q7HgIStxHEpl5vwmIMvB9O189/iemapPDsQlTNCwwE+kEXzgzYmx69MICJTVTAhU2zyLhvhFCTv2o+XrmraRsXGHd/asXluObJsovVEMg/Nw2soy8WIuxNvY8bCDVZ6RDoFzIfif2LH2FlmjKGemuLm4WdK5JhnyQOvDLuWD9RCPG2yB/kmkuB8xMnMftVL7RKVIt0uHCuDJGbcJ4rdD5WTlMxC9i/v/Csw==</ds:SignatureValue>
</ds:Signature>
<saml2:Subject>
<saml2:NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient" NameQualifier="Name qualifier" SPNameQualifier="SP name qualifier">Some NameID value</saml2:NameID>
<saml2:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
<saml2:SubjectConfirmationData InResponseTo="Made up ID" NotBefore="2019-04-16T12:32:51.938Z" NotOnOrAfter="2019-04-20T12:32:51.938Z" Recipient="http://www.obito-sp.com:8080/testSp/assertConsumer"/>
</saml2:SubjectConfirmation>
</saml2:Subject>
<saml2:Conditions NotBefore="2019-04-16T12:32:51.939Z" NotOnOrAfter="2019-04-20T12:32:51.939Z">
<saml2:AudienceRestriction>
<saml2:Audience>http://www.obito-sp.com:8080/testSp/assertConsumer</saml2:Audience>
</saml2:AudienceRestriction>
</saml2:Conditions>
<saml2:AttributeStatement>
<saml2:Attribute Name="username">
<saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xsd:string">bob</saml2:AttributeValue>
</saml2:Attribute>
<saml2:Attribute Name="telephone">
<saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xsd:string">999999999</saml2:AttributeValue>
</saml2:Attribute>
</saml2:AttributeStatement>
<saml2:AuthnStatement AuthnInstant="2019-04-18T12:32:51.947Z">
<saml2:AuthnContext>
<saml2:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:Smartcard</saml2:AuthnContextClassRef>
</saml2:AuthnContext>
</saml2:AuthnStatement>
</saml2:Assertion>

6.SP通过分析断言,可以获取到登陆用户的用户名等信息,然后为该用户创建session,然后将页面重定向到第一步,用户要访问资源的页面,这里同样会被filter拦截,但是当前请求已经包含了认证信息,即session中有对应的信息。然后会直接返回对应资源界面。

大体流程是这样,这篇写的可能比较匆忙,日后在闲暇的时候,再仔细分析一下加密和签名的过程。


http://chatgpt.dhexx.cn/article/F4hecckx.shtml

相关文章

SAML单点登录-spring-security-saml 整合使用

本文链接&#xff1a;http://t.csdn.cn/BIGKc SAML单点登录-spring-security-saml客户端SP 使用spring-security-saml搭建SAML协议的客户端&#xff0c;该依赖是spring框架的官方库&#xff0c;配置方便、文档详细。提供了包括单点登录、单点登出、获取sq元数据文件等接口&…

盘点认证协议 : 普及篇之SAML

首先分享之前的所有文章 , 欢迎点赞收藏转发三连下次一定 >>>> &#x1f61c;&#x1f61c;&#x1f61c; 文章合集 : &#x1f381; https://juejin.cn/post/6941642435189538824 Github : &#x1f449; https://github.com/black-ant CASE 备份 : &#x1f449…

SAML2.0 笔记(二)

文章目录 零、示例代码参考一、前言二、共通内容1.1、引入依赖1.2、初始化SAML部分1.2.1、检查JCE环境1.2.2、初始化服务 1.3、拦截器部分1.3.1、构建AuthnRequest1.3.2、AuthRequest解析1.3.3、SP模式选择1.3.4、IDP模式选择 1.4、涉及的工具类1.4.1、OpenSAMLUtils工具类1.4.…

SAML单点登录-spring-security-saml客户端SP

SAML单点登录-spring-security-saml客户端SP 使用spring-security-saml搭建SAML协议的客户端&#xff0c;该依赖是spring框架的官方库&#xff0c;配置方便、文档详细。提供了包括单点登录、单点登出、获取sq元数据文件等接口&#xff0c;无需自己实现&#xff0c;参考&#x…

SAML入门

SAML (Security Assertion Markup Language)入门 提到SAML (Security Assertion Markup Language), 很多人都会联想到单点登录SSO。那么Saml到底是什么&#xff0c;它跟sso到底有什么联系&#xff1f;这里给大家分享一下我在读完了saml差不多全部规范之后的一些心得。希望给sa…

SAML

SAML SAML&#xff08;Security Assertion Markup Language&#xff09;是一个基于XML的开源标准数据格式&#xff0c;它在当事方之间交换身份验证和授权数据&#xff0c;尤其是在身份提供者和服务提供者之间交换。SAML2.0可以实现基于网络跨域的单点登录&#xff08;SSO&…

基于SAML的单点登录介绍

一、背景知识&#xff1a; SAML即安全断言标记语言&#xff0c;英文全称是Security Assertion Markup Language。它是一个基于XML的标准&#xff0c;用于在不同的安全域(security domain)之间交换认证和授权数据。在SAML标准定义了身份提供者(identity provider)和服务提供者(s…

走进SAML——基础篇

SAML的全称是Security Assertion Markup Language。提到SAML&#xff0c;我们主要想到的是其在各种单点登录场景中大行其道。单点登录我们通常叫做SSO&#xff0c;那么SAML到底是如何实现SSO的呢&#xff1f;在这个系列的文章中&#xff0c;我将为大家阐释清楚。不过&#xff0…

深入浅出SAML协议

SAML概述 SAML&#xff08;Security Assertion Markup Language 安全断言标记语言&#xff09;是一个基于XML的开源标准数据格式&#xff0c;为在安全域间交换身份认证和授权数据&#xff0c;尤其是在IDP&#xff08;Identity Provider身份提供方&#xff09;和SP&#xff08;…

SAML2.0 笔记(一)

文章目录 一、前言二、初识概念1、SP & IDP 的概念2、认识元数据2.1 IDP MetaData2.1.1 SingleLogoutService2.1.2 SingleSignOnService 2.2 SP MetaData2.2.1 SingleLogoutService2.2.2 AssertionConsumerService 2.3 通用节点2.3.1 EntityId2.3.2 KeyDescriptor2.3.3 Nam…

【学习笔记】白盒及黑盒测试方法简介

目录 测试用例什么是测试用例测试用例的要素 白盒测试白盒测试的基本介绍白盒测试用例设计方法一、 逻辑覆盖法1.语句覆盖2. 判定覆盖3.条件覆盖4.判定-条件覆盖5.条件组合覆盖6.路径覆盖 二、基本路径测试法总结 黑盒测试分类功能测试性能测试 测试设计方法1.等价类法2.边界值…

白盒测试方法的简单理解(通俗易懂)

白盒测试主要使用逻辑覆盖测试方法&#xff0c;包括语句覆盖、判定覆盖、条件覆盖、判定-条件覆盖、条件组合覆盖、路径覆盖等。 假设逻辑判断流程图如下图所示&#xff0c;我们简单来说说每种白盒测试方法是如何来进行的。 一、语句覆盖 语句覆盖的定义是&#xff1a;程序中…

详解软件测试中白盒测试基本概念及四种白盒测试方法以及六种逻辑覆盖法(语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖)

在这篇文章中&#xff0c;我们将讲解白盒测试的基本概念&#xff0c;以及四大常用的白盒测试方法。 一、白盒测试基本概念 1、白盒测试的定义 白盒测试又称为结构测试或逻辑驱动测试&#xff0c;它是把测试对象看成一个透明的盒子&#xff0c;它允许测试人员利用程序内部的逻…

【软件测试】软件测试方法之黑盒测试方法和白盒测试

白盒测试方法 一、概念 白盒测试也称结构测试或逻辑驱动测试&#xff0c;是针对被测单元内部是如何进行工作的测试。它根据程序的控制结构设计测试用例&#xff0c;主要用于软件或程序验证。它可以形象得用下图表示&#xff1a; 二、白盒测试方法应该遵循的原则 保证一个模…

白盒测试及用例详解

目录 第一部分&#xff1a;概念理解 第二部分&#xff1a;上例题 第三部分&#xff1a;例题解答 附&#xff1a;纸质版解答过程 参考链接 第一部分&#xff1a;概念理解 在白盒测试中&#xff0c;逻辑覆盖测试是使用较多的方法。按照其对测试的有效程度&#xff0c;又将其…

白盒测试内容

白盒测试方法根据模块内部结构&#xff0c;基于程序内部逻辑结构&#xff0c;针对程序语句、路径、变量状态等来进行测试。 单元测试主要采用白盒测试方法&#xff0c;辅以黑盒测试方法。白盒测试方法应用于代码评审、单元程序之中&#xff0c;而黑盒测试方法则应用于模块、组件…

白盒测试

一、逻辑覆盖 逻辑覆盖法是最常用的白盒测试方法&#xff0c;它包括以下5种方法&#xff1a; ● 语句覆盖 ● 判定覆盖 ● 条件覆盖 ● 判定-条件覆盖 ● 条件组合覆盖 1.语句覆盖 语句覆盖(Statement Coverage)又称行覆盖、段覆盖、基本块覆盖&#xff0c;它是最常见的覆盖方式…

软件测试——白盒测试

目录 1.什么是白盒测试 1.1 白盒测试优缺点 2.白盒测试方法 2.1 静态 2.2 动态 2.2.1 语句覆盖 2.2.2 判断覆盖 2.2.3 条件覆盖 2.2.4 判定条件覆盖 2.2.5 条件组合覆盖 2.2.6 路径覆盖 2.2.7 基本路径测试法(最常使用) 1.什么是白盒测试 白盒测试也称结构测试&…

白盒测试中的几种覆盖方法

​ ​白盒测试用例设计的一个很重要的评估标准就是对代码的覆盖度。一说到覆盖&#xff0c;大家都感觉非常熟悉&#xff0c;但是常见的覆盖都有哪些&#xff1f;各自有什么优缺点&#xff1f;在白盒测试的用例设计中我们应该如何自如地运用呢&#xff1f;今天小编就为大家总…

「软件测试4」一文详解四大典型的白盒测试方法

软件测试——详解白盒测试基本概念&#xff0c;四种白盒测试方法 这是我参与更文挑战的第3天&#xff0c;活动详情查看&#xff1a;更文挑战 在上一篇文章中&#xff0c;我们讲到了黑盒测试。黑盒测试相较于白盒测试来说比较简单&#xff0c;不需要了解程序内部的代码&#x…