0

corePHP を使用して SAML アサーション用の ID プロバイダーをセットアップしました。curl を使用してアサーション リクエストをサービス プロバイダに送信しています。

私の ID プロバイダーは、curl を使用するコア php にあります。

サービス プロバイダーは、asp.net の componentspace 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 に変換できませんでした。]

私はすでにこの問題に長い時間を費やしてきました。

4

1 に答える 1