HTTP 重定向绑定 SAML 请求的 URL 中的签名值应该是多少
What should be the signature value in the URL for HTTP-Redirect Binding SAML Request
此查询是对 post - .
中提出的问题的补充
我正在尝试通过 HTTP 重定向绑定发送 SAML 身份验证请求来实施 dotnet SSO 解决方案。
在生成 SAML AuthnRequest 并使用 SP 的私有证书计算签名后,我尝试了两种方法在 url.
中添加签名
生成 SAML AuthnRequest XML。
<?xml version="1.0" encoding="utf-8"?>
<AuthnRequest xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
ID="_d726aced-4c62-4562-8237-062f7faf0750"
Version="2.0" IssueInstant="2015-04-03T19:59:58.6709058Z"
Destination="https://idp.client.com/adfs/ls/"
ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
AssertionConsumerServiceURL="https://serviceprovider.clientportal.com/samlsso.aspx"
xmlns="urn:oasis:names:tc:SAML:2.0:protocol"
>
<Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion">https://serviceprovider.clientportal.com</Issuer>
<NameIDPolicy Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified" />
</AuthnRequest>
使用 SAML AuthnRequest XML 计算签名,生成如下所示的 XML 签名标签
<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="#_d726aced-4c62-4562-8237-062f7faf0750">
<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>rxoGtdmI...rgY=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>XRLdJHIGWClJxp....fTPUfIghl5kTfV4=</SignatureValue>
方法一在查询字符串中添加签名
使用 Base64 编码和 URL 编码
对 AuthnRequest XML(未嵌入签名)进行编码
- 使用Base64编码和URL编码对上述xml签名字符串进行编码
按以下方式构造URL
https://IDP.com/adfs/ls/?SAMLRequest=UrlEncodedBase64AuthnRequest&RelayState=value&SigAlg=value&Signature=UrlEncodedBase64EncodedXMLSignature
方法二在查询字符串中添加签名
使用 Base64 编码和 URL 编码
对 AuthnRequest XML(未嵌入签名)进行编码
- 从上面的 xml 签名字符串中提取标签的值作为 "Signature" 查询字符串参数的 URL 编码值发送。
按以下方式构建URL
https://IDP.com/adfs/ls/?SAMLRequest=UrlEncodedBase64AuthnRequest&RelayState=value&SigAlg=value&Signature=UrlEncodedValueExtractedFromSignatureValueTag
在这两种情况下,IDP 的签名验证都失败了。关于如何生成要在 URL 中发送的签名的任何想法?
这方面的任何帮助都会有很大帮助!
谢谢,
皮什
HTTP 重定向绑定中使用的签名不是 XML 签名。我建议再看一下 SAML v2.0 绑定规范,第 3.4 节。
或者,看看我们的 ComponentSpace SAML v2.0 组件。这是 .NET/ASP.NET 的商业产品,完全支持 SAML 规范。
请参阅 SAML 2.0 Bindings 文档中的 "Section 3.4.4.1 DEFLATE Encoding",了解有关在使用 REDIRECT 绑定时应如何包含 DSig 的具体说明。
此查询是对 post -
我正在尝试通过 HTTP 重定向绑定发送 SAML 身份验证请求来实施 dotnet SSO 解决方案。 在生成 SAML AuthnRequest 并使用 SP 的私有证书计算签名后,我尝试了两种方法在 url.
中添加签名生成 SAML AuthnRequest XML。
<?xml version="1.0" encoding="utf-8"?> <AuthnRequest xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ID="_d726aced-4c62-4562-8237-062f7faf0750" Version="2.0" IssueInstant="2015-04-03T19:59:58.6709058Z" Destination="https://idp.client.com/adfs/ls/" ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" AssertionConsumerServiceURL="https://serviceprovider.clientportal.com/samlsso.aspx" xmlns="urn:oasis:names:tc:SAML:2.0:protocol" > <Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion">https://serviceprovider.clientportal.com</Issuer> <NameIDPolicy Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified" /> </AuthnRequest>
使用 SAML AuthnRequest XML 计算签名,生成如下所示的 XML 签名标签
<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="#_d726aced-4c62-4562-8237-062f7faf0750"> <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>rxoGtdmI...rgY=</DigestValue> </Reference> </SignedInfo> <SignatureValue>XRLdJHIGWClJxp....fTPUfIghl5kTfV4=</SignatureValue>
方法一在查询字符串中添加签名
使用 Base64 编码和 URL 编码
对 AuthnRequest XML(未嵌入签名)进行编码
- 使用Base64编码和URL编码对上述xml签名字符串进行编码
按以下方式构造URL
https://IDP.com/adfs/ls/?SAMLRequest=UrlEncodedBase64AuthnRequest&RelayState=value&SigAlg=value&Signature=UrlEncodedBase64EncodedXMLSignature
方法二在查询字符串中添加签名
使用 Base64 编码和 URL 编码
对 AuthnRequest XML(未嵌入签名)进行编码
- 从上面的 xml 签名字符串中提取标签的值作为 "Signature" 查询字符串参数的 URL 编码值发送。
按以下方式构建URL
https://IDP.com/adfs/ls/?SAMLRequest=UrlEncodedBase64AuthnRequest&RelayState=value&SigAlg=value&Signature=UrlEncodedValueExtractedFromSignatureValueTag
在这两种情况下,IDP 的签名验证都失败了。关于如何生成要在 URL 中发送的签名的任何想法?
这方面的任何帮助都会有很大帮助!
谢谢,
皮什
HTTP 重定向绑定中使用的签名不是 XML 签名。我建议再看一下 SAML v2.0 绑定规范,第 3.4 节。
或者,看看我们的 ComponentSpace SAML v2.0 组件。这是 .NET/ASP.NET 的商业产品,完全支持 SAML 规范。
请参阅 SAML 2.0 Bindings 文档中的 "Section 3.4.4.1 DEFLATE Encoding",了解有关在使用 REDIRECT 绑定时应如何包含 DSig 的具体说明。