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 に変換できませんでした。]
私はすでにこの問題に長い時間を費やしてきました。