シングルサインオンを実装する (Windows + Apache 環境)

From OtterHub - OTRS Community Wiki
Jump to: navigation, search

本ページは、Apache Web サーバを使用する Windows 環境でシングルサインオンを実装する方法について記述しています。

この実用手引は、Windows ドメイン環境で、OTRS が Windows サーバ上で動作しており、かつ Web サーバとして Apache を使用する場合にのみ有効です。

シングルサインオン (しばしば SSO と省略されます) を実装すると、OTRS ユーザは OTRS を使用する際に認証を受ける (ログオンする) 必要がなくなります。なぜならユーザがコンピュータにログインする時点で既にアクティブディレクトリに対して認証されているので、ちょっとした Apache モジュールをインストールするだけで Web サーバから OTRS に認証情報を受け渡すことができるのです。この方法によりユーザ名とパスワードを入力しなくても OTRS にログインした状態にすることができます。

SourceForge から Apache モジュール mod_auth_sspi を入手してください。もしあなたが比較的新しい OTRS Windows インストーラを使用しているなら、このモジュールは既に Apache モジュールディレクトリに含まれている可能性が高いので、その場合にはもちろんこの手順をスキップできます。

このモジュールを解凍し、次に Apache インストールの /bin ディレクトリから /module ディレクトリにファイルを 2 つ解凍します。

Apache 設定ファイルに以下の 2 行を追加します:

LoadModule sspi_auth_module modules/mod_auth_sspi.so

mod_auth_sspi モジュールは他の全てのモジュールより 先に ロードされる必要があるため、この記述は全ての LoadModule ステートメントリストの先頭に挿入してください。

下記の記述を、cgi-bin ディレクトリの <Directory> ブロックに追加します:

<Directory "d:/otrs/bin/cgi-bin/">
    SSPIAuth On
    SSPIAuthoritative On
    SSPIDomain pdc.example.com
    SSPIUsernameCase lower
    SSPIOfferBasic On
    Require valid-user
    Options +ExecCGI -Includes
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

次に OTRS の設定を、HTTPBasicAuth を使用して作業員の認証を行うようにします。ファイル Kernel/Config.pm に下記を追加してください:

    $Self->{'AuthModule'} = 'Kernel::System::Auth::HTTPBasicAuth';
    $Self->{'AuthModule::HTTPBasicAuth::Replace'} = 'mydomain\\';
    # If you use this module, you should use as fallback
    # the following configuration settings if the user is not authorized
    # apache ($ENV{REMOTE_USER})
    $Self->{LoginURL} = 'http://example.com/Im_sorry_youre_not_authenticated';
# or a youtube vid of Rick Astley?
    $Self->{LogoutURL} = 'http://example.com/portal';


おそらくログイン名からデータをすこしカットする必要がある点に注意してください。これは、ユーザ名が OTRS 上で ドメイン名\ユーザ名 として表示されるためです。Replace ステートメントを使用してドメイン名部分をカットします。OTRS に誰がログインしているか調べるには、OTRS ログファイルを確認することで簡単に行えます。

シングルサインオンが有効である以上、ログインおよびログアウトページはもはや存在しません。その代わりとして、LoginURL と LogoutURL の値が使用されます。LoginURL は作業員アカウントを有していない作業員が OTRS を開こうとした場合、LogoutURL は "ログアウト" ボタンがクリックされた場合に使用されます。LogoutURL でポータルサイトやその他のページにジャンプさせるのもよいでしょう。

いよいよ Web サーバを再起動しましょう。これで使用する準備は整っているはずです!

もし OTRS で顧客ポータルを使用している場合は、 SysConfig の Frontend::Customer::Auth 以下のいくつかの設定を変更する必要がある点に注意してください。この場合の手順も、作業員向けに追加した場合と同様の変更になります。

トラブルの種: シングルサインオンを使用しているとしても、現在のところ、OTRS はいかなるアクティブディレクトリからも作業員を同期しません (同期するようにカスタマイズしない限り)。もしユーザデータやユーザロール等々を AD から同期したい場合は、カスタムスクリプトを作成しそれを cron ジョブで走らせる、等を行う必要があります。さもなければ、ユーザおよびロールを手動で作成する必要があります。

顧客フロントエンド用には、LDAP バックエンドを使用していれば問題は発生しません。これは OTRS に同期すべき顧客ユーザデータは存在しないためです。

もし SOAP インターフェイスを使用している場合は、シングルサインオンを使用しない別ディレクトリに Apache を移動させたいと思うに違いありません。なぜならいかなる SOAP クライアントも、SSO に加えて SOAP ユーザ名およびパスワードも与えられる必要があるという、難しい問題に直面するためです。


訳注