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

如何在python中验证ADFS SAML登录响应签名?

呼延明朗
2023-03-14

我通过HTTP重定向从ADFS获得了SAML响应,并且在重定向时收到了以下请求参数

SAMLResponse=urlencode(base64.encode(deflate(data)))

我可以解密数据和读取声明,但无法验证签名

有人能解释一下如何根据saml响应验证签名的步骤吗?

如果它是python,那就太好了

SAML response = nvdzk 6 nidv 4 rjtq 39 vrzg 3 budqqgjm h44 d 5 enrgvc 5 JK 9k 9 fqqqrp 3t 6 yqj 3h 6 vifzi paTMF CVT 2 arrqcpkxctro 716t 8 whcqofhpmogtz 3 iwg z8 pal 5 ezynwmszqat 08 rcyobvldvt 6 hx cnlqha4kv 6 ly qw 1 qwijwj 6 dnm 6q i5 xfatth/zwld 7 toio gwv 17

SigAlg=”http://www.w3.org/2001/04/xmldsig-more#rsa-sha256

签名=GWTQM9ST1ENHG0CC0AEUKTHF8TJVYHCMTHYMMMPJUV2L/HKMS57PHOZPHAJXZZOW4YNX/DLJWXLVIEQZIRTCOIWRH1/pzpcJsBC2Mm9RH/WRWHITIEDJ4SMIVDI9UD6IBHO 5N7EB05CBLHHMMVTRUP2ITF2/TBSZ8YGNWAGU/6WEwBPzPxpu P1YYUL4LDCFTWN1O4PL357XVO5Q8V8CQOKKZUK9KZUZUKZU9KKKKZZUKKZYKZZZUZZUYYYYKKZKKKYYYZUKUKZZ8DHDWXU/VPZRrDXLiRe07yDO XMIiDNluBZ9UThJHGsAEcTWaiJBzxUiXtzutIOj 0UNr8aD65Yzk0eQ3PIIQ==

SAML响应=pVJNb8IwDP0rVe5pmrQUiEqlCS5I22ugDrtMIXVGtDbp6nTaz18/xqRx4LJbnu1nv2enQNXUrXwGbL1DiPa7DXnV mwWaX6mKhcpzfJc0VWeZ3TFU7OEM RZdibRCTq03m2LiBMS7RF72DsMyoUhlAhOkzUV66NIpMhkmsQZX76QaAcYrFNhYl5CaFEy1uh3gLixrqr9m9Wxalum nBhI3Qk2o7axr5956RXaFE61QDKoOXh4elRDhKKnotk77AFbY2FapDlrtaOfkOammtuTEp5rgXl3GjKjVhQvhScVzzjXACJvprao


共有1个答案

段哲圣
2023-03-14

最简单的答案是使用 https://github.com/onelogin/python-saml,只需调用相应的函数即可。话虽如此,基本步骤是:

  1. 连接:SAMLResponse= RelayState= (仅当它在URI中时) SigAlg=

这些应该是原始的未解码的URI(正如它被发送的一样)

signed = SAMLResponse=babkabdabd

sig = base64decode(Sugnature)

然后根据SigAlg,您需要根据算法的签名数据验证签名(例如rsa-sha1):

这个Perl函数相当容易阅读,可以看到以下步骤:

https://github.com/perl-net-saml2/perl-Net-SAML2/blob/26c53c1241caf86afc15d33d506c0ab573704fee/lib/Net/SAML2/Binding/Redirect.pm#L170

我无法很快找到Python库的相同之处。

但是,您应该知道,虽然在实践中可以使用HTTP重定向,但断言通常非常大,以适合URI,因此它通常是通过HTTP-POST完成的

蒂姆

 类似资料:
  • 问题内容: 我有一个字符串,一个签名和一个公共密钥,我想验证字符串上的签名。密钥如下所示: 我已经阅读了一段时间的pycrypto文档,但是我不知道如何使用这种密钥制作RSAobj。如果您了解PHP,我将尝试执行以下操作: 另外,如果我对任何术语感到困惑,请告诉我。 问题答案: 标记之间的数据是包含PKCS#1 RSAPublicKey的PKCS#8 PublicKeyInfo的ASN.1 DER

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

  • 我需要使用256位的私钥为ECDSA的256位散列签名,就像比特币一样。由于缺少python中的ECDSA文档,我感到绝望。 我在网上找到了很多代码,但是没有什么比或类似的,我发现的所有东西都是我不懂的大量数学代码,但他们使用ecdsa库(我不知道为什么他们不在一个库中添加一个用于签名的签名函数,而是在使用库时需要一页代码?)。 这是目前为止我找到的最好的代码: 但我就是不能相信这样的代码,因为我

  • 问题内容: 我正在运行此节点服务器: 我想为此服务器添加登录表单。因此,当用户通过身份验证时,它将显示。 进程中查询功能,如果未提供任何命令,则将文件返回给客户端,因此我可以将登录命令从客户端发送到服务器,但是当服务器接收到带有用户名密码的登录命令时,服务器应如何处理,应如何处理登录请求并返回登录成功或失败的信息,编写此部分需要帮助。 我试过了。 请建议我该如何添加会话,我尝试在登录功能中添加,请

  • 我正在使用Springs的Webclient进行HTTP GET调用。 我如何验证响应对象的属性,我收到作为我的HTTP调用的响应。 我试图通过阻止响应对象来验证平板地图中的出生日期,但这看起来不是最有效的方法。 以下是我代码的摘录。 任何帮助都非常感谢。

  • 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