#はじめに
PHPでSimpleSAMLphpを使ってSAML認証を実装するときに、セッションでどはまりしちゃったので、
同じ犠牲者が出ないようにメモを残しておきます。
##SimpleSAMLphpのセッションに切り替わる
自身でPHPのセッションを開始させ使っていても、
SimpleSAMLphpの処理を呼び出すと、
それ以降SimpleSAMLphpのセッションに勝手に切り替わります。
ここで厄介なのが、切り替わった後は自身で開始させたセッションが使えなくなってしまうってこと。
そこで、再度自身のセッションに切り替えるためのおまじないが
SimpleSAML_Session::getSessionFromRequest()->cleanup();
です!
Sample.php
session_start(); //自身でセッションを開始させる
$auth = new \SimpleSAML\Auth\Simple('default-sp'); //Simpleをインスタンス化
$auth->requireAuth(); //認証処理呼び出す → ここでSimpleSAMLphpのセッションに切り替わる
$_SESSION['key'] = 'value'; //自身のセッションは使えないのでエラーになる
SimpleSAML_Session::getSessionFromRequest()->cleanup(); //セッションを切り替えるおまじない
$_SESSION['key'] = 'value'; //今度はちゃんとvalueをセッションに保存できる
たった1行で解決できることに1日を費やしてしまった、、。
##おわりに
このおまじないは以下ページで紹介されてますよ
SimpleSAMLphp SP API reference
SimpleSAMLphpは脆弱性があるって2019年にアナウンスされてたと思うので、使うときはそこらへん注意が必要かもです。