我已经使用 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。]
我已经在这个问题上花了很长时间。