SimpleSAMLphp認証ツールをcakePHPに実装しようとしています。私は次のようなSamlAuthenticate
コンポーネントを作成しました。app\Controller\Component\Auth
class SamlAuthenticate extends Component {
[...]
public function authenticate(CakeRequest $request, CakeResponse $response) {
$source = null;
$as = null;
if ($this->Session->check('Saml.source')) {
$source = $this->Session->read('Saml.source');
}
if ($source) {
require_once($this->settings['path'] . DS . 'lib' . DS . '_autoload.php');
$as = new SimpleSAML_Auth_Simple($source);
if(!$as->isAuthenticated()) {
$as->login();
} else {
return $as->getAttributes();
}
}
return false;
}
}
しかし、IDプロバイダーとケーキアプリケーションの間で常にループが発生しています。
サーバーに問題があるのか、IDプロバイダーの構成に問題があるのか疑問に思っていたので、簡単なテストスクリプトを作成しましたが、問題なく動作しました。
require_once('/../simplesamlphp/lib/_autoload.php');
$as = new SimpleSAML_Auth_Simple('facebook');
$as->requireAuth();
echo $as->isAuthenticated();
したがって、cakePHPの何かが認証プロセスを壊します。SimpleSAMLAuthTokenは正しく設定されていますが(SimpleSAMLphp管理パネルで確認できます)、$as->isAuthenticated()
常にfalseを返します。
https://github.com/bvidulich/CakePHP-simpleSAMLphp-Pluginも試してみましたが、同じ結果になりました。