質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SAML

SAMLは、ユーザー認証に必要な情報をインターネットドメイン間で安全に交換することを目的としたXMLベースの標準規格。複数のWebサイト・サービスに一度ログインするだけで、SAML対応のクラウドサービスやWebアプリを利用することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

1回答

1326閲覧

SAML debugMessage($message, $type) の使い方について

yamaguchi0714

総合スコア12

SAML

SAMLは、ユーザー認証に必要な情報をインターネットドメイン間で安全に交換することを目的としたXMLベースの標準規格。複数のWebサイト・サービスに一度ログインするだけで、SAML対応のクラウドサービスやWebアプリを利用することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2021/01/22 06:50

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; }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

本文にも記載していただいていますが、simplesamlphpのコードをみてみると、$typeはLogに出力するメッセージのだし分けにしか使っていなさそうですので、debugMessage()を使用しているコードを見ると、receive()となっていますので、意味的にも'in'で問題ないと思います。

PHP

1 switch ($type) { 2 case 'in': 3 Logger::debug('Received message:'); 4 break; 5 case 'out': 6 Logger::debug('Sending message:'); 7 break; 8 case 'decrypt': 9 Logger::debug('Decrypted message:'); 10 break; 11 case 'encrypt': 12 Logger::debug('Encrypted message:'); 13 break; 14 default: 15 Assert::true(false); 16 } 17

投稿2021/01/29 06:46

2or3

総合スコア60

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問