2016-09-29 4 views
0

お客様のために、カスタムauthsourceモジュールを作成する必要があります。私はすでにLDAP、SQLauthなどのさまざまなauthsourcesを使ってIdpとしてSimpleSAMLphpを設定しています。これらのauthsourcesはすべて共通してログインフォームを使用し、sspmod_core_Auth_UserPassBaseクラスに対して認証します。SimpleSAMLphpパスワードなしのカスタムauthsource

SAMLのインストール(IDP)が企業ネットワーク内にある:これは、次は右ここなど、ユーザー名とパスワードの特殊なケース

ログインフォームが存在することを意味します。そのネットワークの内部/ ADを介して認証されたユーザーがそのネットワーク内のホストにアクセスすると、ユーザー名は自動的にブラウザに挿入され、$_SERVER['PHP_AUTH_USER']で利用可能になります。 。

これは、ユーザーをもう「認証」する必要がないことを意味します。ログインフォームを表示する必要はなく、認証されたユーザーとしてマークするだけで済みます。

私の理解のために、デフォルトのUserPassBaseクラスを拡張する独自のauthsourceを作成するには、少しばかり使いすぎるので、ちょっと立ち往生しました。私は空のパスワードを処理し、自動的にログインフォームなどから転送/ポストする必要があります。

私はそれを処理するより良い方法があると思います。流れはかなりシンプルになります:

SPはIdPにリダイレクトされます。 IdPの「ログインページ」はPHP_AUTH_USER(ログインフォームのような出力はありません)と読み、ユーザーが(それ以上のチェックなしで)認証し、ユーザーが正しく検出された場合は期待どおりにリダイレクトします。 PHP_AUTH_USERが見つからない場合、ユーザーは何らかのエラーページにリダイレクトされます。

どのように正しい方法を解決するためのアイデアですか?私はベースSimpleSAML_Auth_Sourceクラスを拡張する私自身の全く新しいauthsourceクラスを書く必要があると思いますか?たぶん誰かがその状況のた​​めの例を持って、私は車輪を再発明しようとしているのだろうか?

答えて

1

exampleAuth:Staticauthsourceをご覧ください。特定のユーザー

'example-static' => array(
    'exampleauth:Static', 
    'uid' => array('testuser'), 
    'eduPersonAffiliation' => array('member', 'employee'), 
    'cn' => array('Test User'), 
), 

として自動ログインしますであなたはそれのように、独自のモジュールを作成し、代わりにauthsource設定からロード属性の、ユーザ名に基づいてそれらを読み込むことができます。何かのようにしてください

public function authenticate(&$state) { 
    $user = $_SERVER['PHP_AUTH_USER']; 
    if ($user) { 
     $attributes = loadAttributesForUser($user); 
     $state['Attributes'] = $attributes; 
    } else { 
     throw new Exception('No user found'); 
    } 
} 
+0

まったく!ありがとうございました! – Marco

関連する問題