HTTP-Redirect绑定SAML请求的URL中的签名值应该是什么

时间:2015-11-26 11:04:25

标签: saml http-redirect

此查询是对帖子中提出的问题的补充 - HTTP-Redirect Binding SAML Request

我正在尝试通过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生成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>
    

  • 在查询字符串中添加签名的方法1

  • 使用Base64编码和URL编码对AuthnRequest XML进行编码(无需嵌入签名)

  • 使用Base64编码和URL编码对上述xml签名字符串进行编码
  • 按以下方式构建网址

    https://IDP.com/adfs/ls/?SAMLRequest=UrlEncodedBase64AuthnRequest&RelayState=value&SigAlg=value&Signature=UrlEncodedBase64EncodedXMLSignature
    
  • 在查询字符串中添加签名的方法-2

  • 使用Base64编码和URL编码对AuthnRequest XML进行编码(无需嵌入签名)

  • 从上面的xml签名字符串中提取tag的值,作为&#34; Signature&#34;的URL编码值发送。查询字符串参数。
  • 按以下方式构建网址

    https://IDP.com/adfs/ls/?SAMLRequest=UrlEncodedBase64AuthnRequest&RelayState=value&SigAlg=value&Signature=UrlEncodedValueExtractedFromSignatureValueTag  
    

在这两种情况下,我都在IDP获得签名验证失败。有关如何生成要在URL中发送的签名的任何想法吗?

对此的任何帮助都会有很大的帮助!

谢谢,
Piush

2 个答案:

答案 0 :(得分:3)

参见&#34;第3.4.4.1节DEFLATE编码&#34;在SAML 2.0 Bindings文档中,有关如何在使用REDIRECT绑定时包含DSig的具体说明。

答案 1 :(得分:-2)

HTTP-Redirect绑定中使用的签名不是XML签名。我建议再看看SAML v2.0绑定规范,第3.4节。

或者,看看我们的ComponentSpace SAML v2.0组件。这是.NET / ASP.NET的商业产品,完全支持SAML规范。