2

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も試してみましたが、同じ結果になりました。

4

1 に答える 1

4

セッションが競合している可能性があります。

simpleSAMLphp ドキュメントのLostState情報を見てください。

それがあなたの問題であるかどうかを確認するための迅速な回避策:

セッションを memcache に保存するように simplesamlphp を構成します。memcache サーバー、memcache php ドライバーをインストールする必要があります (ir をインストールした後、Apache を再起動することを忘れないでください)。その後、simpleSAMLphp の config/config.php ファイルを編集して設定します。

'store.type' => 'memcache',

simpleSAMLphp が firefox の Cookie 拡張機能を使用してセッションを書き込めることを確認します。(config/config.php ファイルの session/cookie パラメータを見てください。

于 2013-03-20T16:28:22.387 に答える