【问题标题】:CorePHP - SAMLSignOn failed: Failed to convert the base-64 encoded string into XMLCorePHP - SAMLSignOn 失败:无法将 base-64 编码字符串转换为 XML
【发布时间】:2016-12-20 19:43:45
【问题描述】:

我已经使用 corePHP 为 SAML 断言设置了身份提供程序。我正在使用 curl 向服务提供商发送断言请求。

我的身份提供者在使用 curl 的核心 php 上。

Service Provider 是使用 asp.net 中的组件空间 saml2.0 制作的

这是我的代码:

$url = "https://sp.name.com/sso/saml";

$filename = "saml1.xml";
$read = fopen($filename, "r");
$XML = fread($read, filesize($filename));
fclose($read);

$XML_utf8 = utf8_encode($XML);
$XML64 = base64_encode($XML_utf8);

$data = "SAMLResponse=".$XML64."&RelayState=https://sp.name.com/sso/saml";

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);

当我在服务提供商上运行此脚本时,会生成以下错误消息:

SAMLSignOn 失败:无法将 base-64 编码字符串转换为 XML。
[异常:SAMLSignOn 失败:无法将 base-64 编码的字符串转换为 XML。]
[SAMLSerializationException: 无法将 base-64 编码的字符串转换为 XML。]

我已经在这个问题上花费了很长时间。

【问题讨论】:

  • 一方面,参数名称应区分大小写:SAMLResponse 和 RelayState
  • @HansZ。感谢您的回复,我确实使用 SAMLResponse 和 RelayState 来发送请求。但是服务提供商仍然显示相同的错误。有没有其他方法可以将 XML 编码为 base64 ?
  • 打印出生成的编码表单并在外部验证
  • @HansZ。做过这个。我使用了 base64 的在线解码器。它正在准确地解码它。

标签: php curl single-sign-on saml-2.0 component-space


【解决方案1】:

证书不匹配和 saml 断言格式存在问题。所以我们切换到 asp.net 并停止使用 PHP 来完成该任务。现在我们在 asp.net 中使用 COMPONENTSPACE SAML2.0 库

问题是:我们如何设法用 asp.net 运行 php 代码

ANS:我们向 asp.net 代码发送一个带有登录凭据的 api 请求,然后 asp.net 调用服务提供商并向我们返回重定向 url。

希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-09
    • 2013-09-26
    • 2018-01-22
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 2013-07-09
    • 1970-01-01
    相关资源
    最近更新 更多