SAML 2.0 实例分析 idp向sp发送响应(4)
当idp与user建立起联系后,idp向sp发送响应
<samlp:Response xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
ID="_81e65e52081649f77587dd7a12b0e3c3"
InResponseTo="6541c310-4e01-4d85-8f8b-3d05d119b9c2"
IssueInstant="2020-04-18T08:13:50.867Z"
Version="2.0"
>
<saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">http://localhost:8080/idp</saml:Issuer>
<samlp:Status>
<samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success" />
</samlp:Status>
<saml:Assertion xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
ID="18dfba4b-e0b5-46fa-b7b7-7fdbbe295b39"
IssueInstant="2020-04-18T08:13:50.866Z"
Version="2.0"
>
<saml:Issuer>http://localhost:8080/idp</saml:Issuer>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
<Reference URI="#18dfba4b-e0b5-46fa-b7b7-7fdbbe295b39">
<Transforms>
<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
<Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
<DigestValue>vFGoJhHTVDDvkRz9bezf9+zhEBs=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>DuvgFw+uqHeMZr5y/1iF29ZNB6Gt6Vj6IqyIN4wR0Ty5EVd2iaYREQxIRv+/xLoko7XiO4o3bkFs
6g/mlDc3Bs81LZYBCW11kTlDNtayQtuffzvdI+w9Z4h5pFo8uvAo7bA4hDPlUSsewu/5MOGMUiiI
4b/HoIrb7sCeZgnFF8k=</SignatureValue>
<KeyInfo>
<X509Data>
<X509Certificate>MIICcjCCAdugAwIBAgIEYUV9sjANBgkqhkiG9w0BAQsFADBsMRAwDgYDVQQGEwdVbmtub3duMRAw
DgYDVQQIEwdVbmtub3duMRAwDgYDVQQHEwdVbmtub3duMRAwDgYDVQQKEwdVbmtub3duMRAwDgYD
VQQLEwdVbmtub3duMRAwDgYDVQQDEwdVbmtub3duMB4XDTE3MTIyMTA2NDc0MloXDTI3MTIxOTA2
NDc0MlowbDEQMA4GA1UEBhMHVW5rbm93bjEQMA4GA1UECBMHVW5rbm93bjEQMA4GA1UEBxMHVW5r
bm93bjEQMA4GA1UEChMHVW5rbm93bjEQMA4GA1UECxMHVW5rbm93bjEQMA4GA1UEAxMHVW5rbm93
bjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtD3CyKRmy7aaTOeBCDiQaqGQu99wEAHqbcXu
7/ZkNYGlb9HIGM4ga5rnQqrZIR+1njcss1B+6agRmREu3Db9SKL6OqsdKEY8KZX318VhksoECK1m
FvzuwK/S7VAHAay3ApLfBMCC+8sZ7njvByqSo0CAFAcQvu5mtkYPC6xzHX0CAwEAAaMhMB8wHQYD
VR0OBBYEFMcXi7CGVHaw7JLJlEi3mSV0ny4QMA0GCSqGSIb3DQEBCwUAA4GBAIM4m+sXq/S5ryxa
Lf8o/HlKHj+61e6n6vP+zrVnAuXiNNjEI76PQWws+1CpaZq2XI0IC+mY1SwdrvltUTCiTFEv3NA5
EhnB6aPUHORX2WF80s6yEq8AZ0IITRL2nxilb+kWxbU/BKLN7qWXcwEI/mKM/Aowha6vYxtnIYy2
H8hy</X509Certificate>
</X509Data>
</KeyInfo>
</Signature>
<saml:Subject>
<saml:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress">test@qq.com</saml:NameID>
<saml:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
<saml:SubjectConfirmationData Recipient="http://localhost:8080/sp/consumer" />
</saml:SubjectConfirmation>
</saml:Subject>
<saml:Conditions NotBefore="2020-04-18T08:13:35.866Z"
NotOnOrAfter="2020-04-18T08:14:20.866Z"
>
<saml:AudienceRestriction>
<saml:Audience>http://localhost:8080/sp</saml:Audience>
</saml:AudienceRestriction>
</saml:Conditions>
<saml:AuthnStatement AuthnInstant="2020-04-18T08:13:50.866Z">
<saml:AuthnContext>
<saml:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport</saml:AuthnContextClassRef>
</saml:AuthnContext>
</saml:AuthnStatement>
</saml:Assertion>
</samlp:Response>
1、 samlp:Response 根节点,表明这是一个 response 对象
2、 Destination 目标地址,即 ACS 地址,Response 返回的地址
3、 ID 唯一标识
4、 IssueInstant 时间戳
5、 saml:Issuer IDP 身份信息,IDP 的 EntityId
6、 samlp:Status 认证结果, samlp:StatusCode 表明认证成功或失败
7、 saml:Assertion 断言,这是 Response 中最为重要的字段,里面包含着用户身份信息
8、 Signature 断言的签名,使用非对称私钥对 Assertion 内容(不包含 Signature)进行签名,防止信息被篡改
9、 saml:Subject 身份主体,主要包括身份信息
10、 saml:NameID 身份信息
11、 saml:Conditions 给出了断言被认为有效的验证条件。
12、 saml:AuthnStatement 描述了在身份提供者的认证行为。
首先生成断言信息 Assertion,然后对断言进行签名,将签名信息插入到 Assertion 的子节点中,即 <Signature>的信息,最后生成 Response 结构,将 Response 字符串进行 base64 编码后 post 到 acs 地址上,SP 对其进行验证。
SAML 中的签名:
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
<Reference URI="#18dfba4b-e0b5-46fa-b7b7-7fdbbe295b39">
<Transforms>
<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
<Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
<DigestValue>vFGoJhHTVDDvkRz9bezf9+zhEBs=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>DuvgFw+uqHeMZr5y/1iF29ZNB6Gt6Vj6IqyIN4wR0Ty5EVd2iaYREQxIRv+/xLoko7XiO4o3bkFs
6g/mlDc3Bs81LZYBCW11kTlDNtayQtuffzvdI+w9Z4h5pFo8uvAo7bA4hDPlUSsewu/5MOGMUiiI
4b/HoIrb7sCeZgnFF8k=</SignatureValue>
<KeyInfo>
<X509Data>
<X509Certificate>MIICcjCCAdugAwIBAgIEYUV9sjANBgkqhkiG9w0BAQsFADBsMRAwDgYDVQQGEwdVbmtub3duMRAw
DgYDVQQIEwdVbmtub3duMRAwDgYDVQQHEwdVbmtub3duMRAwDgYDVQQKEwdVbmtub3duMRAwDgYD
VQQLEwdVbmtub3duMRAwDgYDVQQDEwdVbmtub3duMB4XDTE3MTIyMTA2NDc0MloXDTI3MTIxOTA2
NDc0MlowbDEQMA4GA1UEBhMHVW5rbm93bjEQMA4GA1UECBMHVW5rbm93bjEQMA4GA1UEBxMHVW5r
bm93bjEQMA4GA1UEChMHVW5rbm93bjEQMA4GA1UECxMHVW5rbm93bjEQMA4GA1UEAxMHVW5rbm93
bjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtD3CyKRmy7aaTOeBCDiQaqGQu99wEAHqbcXu
7/ZkNYGlb9HIGM4ga5rnQqrZIR+1njcss1B+6agRmREu3Db9SKL6OqsdKEY8KZX318VhksoECK1m
FvzuwK/S7VAHAay3ApLfBMCC+8sZ7njvByqSo0CAFAcQvu5mtkYPC6xzHX0CAwEAAaMhMB8wHQYD
VR0OBBYEFMcXi7CGVHaw7JLJlEi3mSV0ny4QMA0GCSqGSIb3DQEBCwUAA4GBAIM4m+sXq/S5ryxa
Lf8o/HlKHj+61e6n6vP+zrVnAuXiNNjEI76PQWws+1CpaZq2XI0IC+mY1SwdrvltUTCiTFEv3NA5
EhnB6aPUHORX2WF80s6yEq8AZ0IITRL2nxilb+kWxbU/BKLN7qWXcwEI/mKM/Aowha6vYxtnIYy2
H8hy</X509Certificate>
</X509Data>
</KeyInfo>
</Signature>
SAML 中的签名算法就是对 xml 文档树进行签名,说明如下:
1、确认签名内容,通过 URL 将这些内容表示为引用资源,用 Reference 标识。对于断言信息来说,其 URI 是saml:Assertion的 ID
2、对待签名的数据进行转化处理,包括执行编码规则、规范化算法等, Transform 指定了转化的算法
3、对整个断言进行消息摘要, DigestMethod 指定了消息摘要算法,消息摘要的结果保存在 DigestValue 元素中
4、构造包含 Reference 的 SignedInfo 元素
5、 CanonicalizationMethod 元素指定了规范化的算法,如果不对其进行规范化处理,验证 xml 签名时可能因为 xml 结构表示不同而失败
6、计算 SignedInfo 的摘要,使用 SignatureMethod 声明的签名算法,并对其进行签名,结果保存到 SignatureValue 元素中
7、 KeyInfo 元素可选,表明签名的公钥信息
SP 接收到 IDP 的响应后,验证签名,获取用户的信息后跳转响应页面。
SAML 2.0 实例分析 idp向sp发送响应(4)的更多相关文章
- SAML 2.0 实例分析 sp向idp发送请求(3)
user没有登陆过sp,此时sp向idp发送请求,下文是请求的xml形式 <samlp:AuthnRequest xmlns:samlp="urn:oasis:names:tc:SAM ...
- SAML 2.0 流程分析(2)
- SAML 2.0 Profiles--wiki
http://en.wikipedia.org/wiki/SAML_2.0#Web_Browser_SSO_Profile In SAML 2.0, as in SAML 1.1, the prima ...
- ComponentSpace SAML v2.0 for .NET 使用介绍
下载地址:http://samlsso.codeplex.com/ 以下描叙参考版本为其官网最新版本2.5.0.6.相对2.4版本,2.5有了很大改进,很多接口方法都变了.使用起来更方便,易懂. 广告 ...
- OpenCASCADE 麻花钻头造型实例分析
OpenCASCADE 麻花钻头造型实例分析 eryar@163.com Abstract. OpenCASCADE provides a simple twist drill bit modelin ...
- RPC原理及RPC实例分析
在学校期间大家都写过不少程序,比如写个hello world服务类,然后本地调用下,如下所示.这些程序的特点是服务消费方和服务提供方是本地调用关系. 1 2 3 4 5 6 public class ...
- java基础学习05(面向对象基础01--类实例分析)
面向对象基础01(类实例分析) 实现的目标 1.如何分析一个类(类的基本分析思路) 分析的思路 1.根据要求写出类所包含的属性2.所有的属性都必须进行封装(private)3.封装之后的属性通过set ...
- (转)实例分析:MySQL优化经验
[IT专家网独家]同时在线访问量继续增大,对于1G内存的服务器明显感觉到吃力,严重时甚至每天都会死机,或者时不时的服务器卡一下,这个问题曾经困扰了我半个多月.MySQL使用是很具伸缩性的算法,因此你通 ...
- sql注入实例分析
什么是SQL注入攻击?引用百度百科的解释: sql注入_百度百科: 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.具 ...
随机推荐
- Spring Cloud Gateway简单入门,强大的微服务网关
我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 简介 见名知义,Spring Cloud Gateway是用于微服务场景的网关组件,它是基于Spring WebFlu ...
- 【模拟8.03】斐波那契(fibonacci) (规律题)
就是找规律,发现每个父亲和孩子的差值都是距儿子最大的fibonacc 也是可证的 f[i]表示当前月的兔子总数 f[i]=f[i-1]+f[i-2](f[i-2]是新生的,f[i-1]是旧有的) 然后 ...
- 合肥某小公司面试题:Spring基础
<对线面试官>系列目前已经连载25篇啦!有深度风趣的系列! [对线面试官]Java注解 [对线面试官]Java泛型 [对线面试官] Java NIO [对线面试官]Java反射 & ...
- 乘风破浪,Windows11预览版升级和安装,积极准备中的大跃进
安装Windows11 暂时官方还没出可靠的ISO 升级到Windows11 预览版 关于一些限制 目前DEV预览通道对从老系统升级到Windows11暂时没有什么限制,只是会提示你可能不太好,但是安 ...
- Mac nasm 汇编入门
下载 brew install nasm code SECTION .data msg: db "hello world", 0x0a len: equ $-msg SECTION ...
- JAVA 中的权限访问修饰符(public,protected,default,private )
JAVA中有四个权限访问修饰符:public,protected,default,private 注意:这里讲的是对类中属性和方法的访问权限,并不是类的访问权限 1.default:包访问权限 如果什 ...
- linux cut的用法
p.p1 { margin: 0; font: 12px ".PingFang SC Semibold"; color: rgba(53, 53, 53, 1) } p.p2 { ...
- redis阻塞原因以及处理方案
来源:https://blog.csdn.net/francis123580/article/details/82500700 Redis是单线程架构,在高并发的场景下,如果出现阻塞,会有严重后果,以 ...
- ollvm混淆的某apk题目的逆向分析
打开jadx,就发现了我们的老朋友数字壳 典型的类抽取壳,直接上fart脱就完事了,我这里使用的是fart的frida脚本,省去了刷机的步骤 这里的脱壳脚本,自行去github的寒冰大佬那边clone ...
- XCTF logmein
一.查壳 发现是64位的Linux文件(ELF可以看出是linux的文件) 二.拖入ida64,静态分析 注意这里两个坑: 1.strcpy是复制字符串的意思,前面定义的v8数组只有8个,但是后面的字 ...