SAML2の「simplesamlphp\saml2\src\SAML2\HTTPRedirect.php」の
「$message = gzinflate($message);」にてエラーが発生します。
エラー原因調査のため、エラー発生時にログに変換前の値、変換途中の値を出力したいと考えております。
【Utils::getContainer()->debugMessage】を使用してメッセージを出力したいのですが、使用方法が分かりません。
パラメータ1がメッセージ、パラメータ2がタイプを指定するようなのですが、
このタイプには「in」を設定で問題ないのでしょうか?
よろしくお願いいたします。
****************************************************
public static function debugMessage($message, $type)
{
\SimpleSAML\Utils\XML::debugSAMLMessage($message, $type);
}
*********************************************
public static function debugSAMLMessage($message, $type)
{
if (!(is_string($type) && (is_string($message) || $message instanceof DOMElement))) {
throw new \InvalidArgumentException('Invalid input parameters.');
}
// see if debugging is enabled for SAML messages $debug = Configuration::getInstance()->getArrayize('debug', ['saml' => false]); if ( !(in_array('saml', $debug, true) // implicitly enabled || (array_key_exists('saml', $debug) && $debug['saml'] === true) // explicitly enabled // TODO: deprecate the old style and remove it in 2.0 || (array_key_exists(0, $debug) && $debug[0] === true)) // old style 'debug' ) { // debugging messages is disabled return; } if ($message instanceof DOMElement) { $message = $message->ownerDocument->saveXML($message); } switch ($type) { case 'in': Logger::debug('Received message:'); break; case 'out': Logger::debug('Sending message:'); break; case 'decrypt': Logger::debug('Decrypted message:'); break; case 'encrypt': Logger::debug('Encrypted message:'); break; default: assert(false); } $str = self::formatXMLString($message); foreach (explode("\n", $str) as $line) { Logger::debug($line); } }
**********************************************************
/**
* Receive a SAML 2 message sent using the HTTP-Redirect binding.
*
* Throws an exception if it is unable receive the message.
*
* @throws \Exception
* @return \SAML2\Message The received message.
*
* NPath is currently too high but solving that just moves code around.
* @SuppressWarnings(PHPMD.NPathComplexity)
*/
public function receive()
{
$data = self::parseQuery();
if (array_key_exists('SAMLRequest', $data)) {
$message = $data['SAMLRequest'];
} elseif (array_key_exists('SAMLResponse', $data)) {
$message = $data['SAMLResponse'];
} else {
throw new \Exception('Missing SAMLRequest or SAMLResponse parameter.');
}
if (isset($data['SAMLEncoding']) && $data['SAMLEncoding'] !== self::DEFLATE) { throw new \Exception('Unknown SAMLEncoding: '.var_export($data['SAMLEncoding'], true)); } $message = base64_decode($message); if ($message === false) { throw new \Exception('Error while base64 decoding SAML message.'); } **$message = gzinflate($message);** ※ここでエラーが発生する。 if ($message === false) { throw new \Exception('Error while inflating SAML message.'); } Utils::getContainer()->debugMessage($message, 'in'); $document = DOMDocumentFactory::fromString($message); $xml = $document->firstChild; $message = Message::fromXML($xml); if (array_key_exists('RelayState', $data)) { $message->setRelayState($data['RelayState']); } if (!array_key_exists('Signature', $data)) { return $message; } if (!array_key_exists('SigAlg', $data)) { throw new \Exception('Missing signature algorithm.'); } $signData = [ 'Signature' => $data['Signature'], 'SigAlg' => $data['SigAlg'], 'Query' => $data['SignedQuery'], ]; $message->addValidator([get_class($this), 'validateSignature'], $signData); return $message; }
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。