当前位置: 首页 > 知识库问答 >
问题:

验证来自ADF的SAML响应

弘焕
2023-03-14

我在验证从ADFS服务器获得的SAML响应时遇到了问题。我以url的形式获得响应,例如callback_url?samlresponse=encoded_xml&signature=signature_value&signalg=signature_algorithe,而signature_algorithe是http://www.w3.org/2001/04/xmldsig-more#rsa-sha256。我设法解码了响应,但无法找到使用给定签名验证响应的方法。

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

我认为使用base64解码签名是不够的。不幸的是,到目前为止,我还没能找到下一步该做什么。所以我的问题是:我必须做什么才能正确地解码签名才能验证它?

共有1个答案

衡修洁
2023-03-14

我想你把散列和签名混为一谈了。

签名将消息的哈希作为输入,并使用密钥对其进行加密。在您的示例中,sigalg参数指示SAML消息的32字节哈希用(显然)2048位RSA私钥加密,可能使用PKCS#1 v1.5填充,如https://www.rfc-editor.org/rfc/RFC6931#Section-2.3.2中所述,导致256字节签名,可以用发送方的相关2048位RSA公钥进行验证。

除此之外:我假设您引用的是SAML请求而不是SAML响应,因为后者不能通过使用Web浏览器SSO配置文件规范中所述的HTTP重定向绑定发送,页面16:https://docs.oasis-open.org/security/SAML/v2.0/saml-profiles-2.0-os.pdf(页面顶部):

 类似资料:
  • OpenAM是否依赖于注册IDP的公钥来使SAML响应多样化 或还取决于来自IDP-like算法的SAML响应中的哈希算法=”http://www.w3.org/2000/09/xmldsig#sha1“” 注意OpenAM版本:13.0.0

  • 我正在学习使用ADFS进行基于SAML的声明验证。与其将用户带到IDP的登录页面,然后请求用户输入她的凭据,不如在SP中获取用户的凭据并将其传递给IDP以在那里进行验证,然后使用SAML令牌返回SP。 这纯粹是实验性的,我想尝试一下,以避免用户在IdP登录页面中输入凭据,而不是在SP中获取她的凭据从IdP验证。 谢谢

  • 我试图遵循以下规范来验证SAML响应的签名:https://www.w3.org/tr/xmldsig-core/#sec-pkcs1 下面是我的工作流程:我得到SAML响应。我去掉签名信封,我把它规范化,我检查摘要,然后我检查签名。我能够成功地计算转换的SAML响应的SHA1摘要,并对其进行验证。然而,RSA-SHA1签名检查仍然无法实现。 SAML响应包含签名方法算法:http://www.w

  • 2016年8月1日11:34:39 AM org.apache.catalina.core.standardWrapperValve在路径为[/travelocity.com]的上下文中为servlet[jsp]调用严重:servlet.service()引发了异常[SAML响应的签名验证失败],根本原因为org.wso2.carbon.identity.sso.agent.exception.s

  • 我可以通过HTTP-Redirect绑定登录和接收SAMLResponse,也可以使用privatekey解密和检索声明。 我的问题仍然是,我们需要验证saml响应(ADFS)吗?如果是如何做到这一点 我需要使用IP(身份提供商)公钥吗?它将在IP(元数据)中可用吗? 我在下面的请求参数中有SAML响应 SAMLACK=签名=hashvalue sigAlg=sha256 如何验证?

  • 我们在针对带IDP的SAML SSO的Java应用程序中使用了(v1.0.3)。 null null