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

如何用PHP解码来自idP的加密SAML响应?

姜泳
2023-03-14

第一次尝试将SAML实现为SP。我们决定尝试在定制的MVC框架中使用SimpleSAMLphp,因为我们认为这会节省时间。

我的问题是,我最终进入了一个无限循环,或者属性是空的。

我已经在SimpleSAMLphp中配置了元数据,并从authenticate接口对其进行了测试。idP有一个回发URL集,与我们开始的位置不同,因此:

  • 用户点击域名。com/sso我们创建了新的SimpleSAML\u Auth\u Simple('our-configured-sp')

如果我们这样做,我们必须使用相同的代码($as=new SimpleSAML_Auth_Simple('our-configured-sp'))创建一个新实例,当我们这样做时,$as-

所以我们试着把这些都用在一种方法中。如上所述,只有您从域开始。com/sso/saml,但这次循环不断重复。用户访问我们的域,被重定向到idP,然后重定向回我们,然后再返回idP,直到永远。

最终我放弃了。我可以在$\u POST['SAMLResponse']中得到响应,我可以base64\u decode()查看它说了什么。我将它放入一个simplexmlement对象中,并能够使用它。问题是数据是加密的,现在我一直在试图解密它。

我在这些节点中有数据,但不知道如何处理:

  • samlp:响应-

我不知道如何使用其中的每一个,尽管我可以验证X509证书是与我的私钥匹配的公钥。我尝试过使用不同的密钥(或我认为是密钥的)解码各种值,但无济于事。

  • samlp:响应-

理想情况下,我想让它完全在SimpleSAMLphp中工作,但我真的不知道问题出在哪里,所以我不知道如何排序。元数据如下所示:

$metadata = array(
    'https://partner.com' => array(
        'SingleSignOnService' => 'https://partner.com/sso/response',
        'SingleLogoutService' => 'https://partner.com/sso/slo',
        'assertion.encryption' => true,
        'certificate' => partner.cer'
    )
);

Authsources有这样一个功能:

$config = array(
    'our-configured-sp' => array(
        'saml:SP',
        'privatekey' => 'my.private.pem',
        'certificate' => 'my.public.cert',
        'idp' => 'https://partner.com',
        'baseurlpath' => 'simplesaml/',
    )
);

有什么帮助吗?最好使用SimpleSAMLphp来完成整个过程,但如果不是,我会接受一些关于如何解密文件的指导。

谢谢大家


共有1个答案

朱通
2023-03-14

请检查一个登录SAML php库,它有很好的文档和代码。您可以很容易地使用它来处理响应,getAttributes可以做您想做的事情。

我知道这个问题由来已久,但它可能会帮助仍在寻找相同答案的人。

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

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

  • 谷歌应用程序-单点登录(SSO)是否支持*压缩编码*?我正在使用一个IDP,它在压缩SAML响应后对其进行编码。当此响应提交到谷歌应用程序时,它不允许登录,并显示错误“无法解析登录请求”。禁用放气后,工作正常。

  • 我正在使用SAML和外部IdP实现SSO选项。如果我在单击浏览器中的SSO按钮后检查收到的SAML响应,我可以看到所需的身份验证数据(如用户名和电子邮件),因此与IdP的通信工作正常。 然而,Keycloak并不执行登录,并显示给我一个页面,上面写着:“我们很抱歉...登录超时,请重新登录。”,并且没有新用户注册。我的领域中令牌的登录超时设置为30分钟。 查看日志时,我发现了以下错误: 我发现这可

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

  • 我在验证从ADFS服务器获得的SAML响应时遇到了问题。我以url的形式获得响应,例如,而是http://www.w3.org/2001/04/xmldsig-more#rsa-sha256。我设法解码了响应,但无法找到使用给定签名验证响应的方法。 我的主要问题是签名有一个非常意外的格式。由于给定的签名算法,我希望签名的长度为32字节,但是当我base64-decode签名时,我得到的是长度为25