从ADFS验证SAML响应

时间:2017-07-03 16:34:12

标签: saml adfs

我在验证从ADFS服务器获得的SAML响应时遇到问题。我将回复显示为CALLBACK_URL?SAMLResponse=ENCODED_XML&Signature=SIGNATURE_VALUE&SigAlg=SIGNATURE_ALGORITHM,而SIGNATURE_ALGORITHMhttp://www.w3.org/2001/04/xmldsig-more#rsa-sha256。我设法解码响应,但我无法找到使用给定签名验证响应的方法。

我的主要问题是签名的格式非常意外。由于给定的签名算法,我希望签名的长度为32个字节,但是当我对base-base签名时,我得到的是一个长度为256的字符串。

我希望使用base64解码签名是不够的。不幸的是,到目前为止我还没有找到下一步该做什么。所以我的问题是:我需要做些什么来正确解码签名才能验证它?

1 个答案:

答案 0 :(得分:2)

我相信你将哈希与签名混为一谈。

签名将消息的哈希值作为输入,并使用密钥对其进行加密。在您的情况下,SigAlg参数指示SAML消息的32字节散列使用(显然)2048位RSA私钥加密,可能使用https://tools.ietf.org/html/rfc6931#section-2.3.2中所述的PKCS#1 v1.5填充产生256字节签名,可以使用发送方的相关2048位RSA公钥进行验证。

除此之外:我假设您引用的是SAML请求而不是SAML响应,因为后者不能使用HTTP重定向绑定发送,如第16页上的Web浏览器SSO配置文件规范中所述:{{3 }(页面顶部):

  
      
  1. 向服务提供商发送身份提供商问题在步骤5中,身份提供商发出要传递的消息   用户代理到服务提供商。 HTTP POST或HTTP   工件绑定可用于将消息传输到服务   提供者通过用户代理。该消息可能表示错误,或   将包括(至少)一个身份验证断言。 HTTP重定向   不得使用绑定,因为响应通常会超过   大多数用户代理允许的URL长度。
  2.