Create: 2014/03/08
LastUpdate: 2014/03/15
≪ メニューに戻るLastUpdate: 2014/03/15
「 [CentOS6][OpenAM10] OpenAMを試す - OpenAMのシングルサインオン(SSO)を試す(2/4)」では、下図の環境(グレー部分)を構築し、ユーザ情報は、OpenAMに内蔵しているOpenDJ(LDAP)に格納していました。
ここでは、前述の環境にLDAPサーバ(下図のグリーン部分)を追加し、OpenAMのサブレルム(test01)を変更してきます。
ユーザ端末:192.168.1.91(exdt01.example.com)
OpenAMサーバ:192.168.1.92(exam01.example.com)
リバースプロキシサーバ:192.168.1.93(exig01.example.com)
WEBサーバ:192.168.1.94(www.example.com)
LDAPサーバ:192.168.1.95(exdj01.example.com)
LDAPサーバ:192.168.1.95(exdj01.example.com)
今回、LDAPサーバは、OpenDJで構築します。
ユーザ情報はLDAPサーバに外だしで格納するようにし、LDAPサーバを使用したLDAP認証を試してみます。
1.LDAPサーバの構築
CentOS6.5(32bit) で仮想マシンを作成して、OpenDJをインストールします。
OpenDJはGUI操作できるようなので、CentOSのGNOMEデスクトップ環境もインストールします。
1.1.OSインストール
CentOS6のインストール手順は、「 [XenServer 6.1.0] CentOS6.4(32bit)のネットワーク・インストール」を参照してください。
今回は、以下のような設定にします。
- OS:CentOS6.4 (32bit)
- SELinux:無効
- ファイヤーウォール:無効
- タイムゾーン:Asia/Tokyo
- 言語:ja_JP.UTF-8
- パッケージ:最小構成
- ホスト名: exdj01
- IPアドレス: 192.168.1.95
1.2.JAVAインストール
Oeracleのサイトから JDK をダウンロードしてインストールします。
-
ダウンロードサイト: Java SE – Downloads | OTN
ダウンロードしたファイルをサーバにおいて、以下のように実行してインストールします。
# sh ./jdk-6u45-linux-i586-rpm.bin
1.3.OpenDJインストール
/etc/hosts にホスト名を登録します。
192.168.1.95 exdj01今回は、コミュニティ版のOpenDJを使用します。
ForgeRock のコミュニティサイトからOpenDJ をダウンロードして、/opt に解凍します。
# cd /opt # wget http://download.forgerock.org/downloads/opendj/2.5.0-Xpress1/OpenDJ-2.5.0-Xpress1.zip # unzip OpenDJ-2.5.0-Xpress1.zipOpenDJのインストーラを起動します。
# cd /opt/OpenDJ-2.5.0-Xpress1 # ./setup下図の画面が表示されたら[次へ]ボタンをクリックします。
管理者のパスワード以外は、デフォルトの設定を使用します。
[パスワード]を入力して、[次へ]ボタンをクリックします。
今回はLDAPサーバが1台しかないので、レプリケーションはしません。
[これはスタンドアロンサーバーになります]を選択して、[次へ]ボタンをクリックします。
[ディレクトリベースDN]は、OpenAMのベースDNと同じ "dc=example,dc=com" にします。
[次へ]ボタンをクリックします。
デフォルトの設定を使用します。
[次へ]ボタンをクリックします。
表示内容を確認して、OKなら、[完了]をクリックします。
セットアップの実行中です。
このまま、しばらく待ちます。
セットアップの完了です。[閉じる]ボタンをクリックすれば、下図の画面は消えます。
[コントロールパネルの起動]ボタンをクリックして、OpenDJの管理画面を表示してみます。
[パスワード]は、上記の[サーバ設定]で設定したものです。
[パスワード]を入力し、[OK]ボタンをクリックします。
このまま、しばらく待ちます。
下図のように [OpenDJ 制御パネル]が表示され、サーバーの状態が "起動中" であればOKです。
[OpenDJ 制御パネル] は、以下のようにして起動します。
# cd /opt/OpenDJ-2.5.0-Xpress1/bin # ./control-panel
1.4.OpenAM用のOU(組織単位)の登録
OpenAMの管理画面(対象)でユーザを登録したときに、下記エラーがでるようであれば、LDAPサーバのOUの設定に間違いがあります。
プラグイン com.sun.identity.idm.plugins.ldapv3.LDAPv3Repo で LDAP 例外が発生しました。LDAP Error 32: The entry specified in the request does not exist.このとき、OpenDJのログファイル(/opt/OpenDJ-2.5.0-Xpress1/logs/access)を見ると、以下のようなエラーが記録されてました。
OpenAMが使用する ou は、デフォルトでは、"people" ですが、OpenDJの初期状態には存在しないのでエラーになっているようです。
[09/3/2014:09:29:54 +0900] ADD RES conn=4 op=3 msgID=224 result=32 message="エントリ uid=xxxx,ou=people,dc=example,dc=com を追加できません。サーバー内に親エントリ ou=people,dc=example,dc=com が存在しません" etime=2というわけで、OpenDJに、"ou=people" を作成します。
OpenDJの管理画面で、[エントリの管理]ボタンをクリックします。
[dc=example,dc=com]を右クリックするとメニューが表示されるので、[新規組織単位] をクリックします。
[名前]に "people" を入力して、[OK]ボタンをクリックします。
下図のメッセージが表示されたらOKです。[閉じる]ボタンをクリックします。
下図のように "perople" が表示されていれば、OKです。[閉じる]ボタンをクリックします。
OpenAM管理画面(対象)でユーザ登録すると、"people" に表示されるようになります。
1.5.OpenAM用のスキーマ登録
OpenAMの管理画面(対象)でユーザを登録したときに、下記エラーがでるようであれば、LDAPサーバにOpenAM用のスキーマが不足しています。
プラグイン com.sun.identity.idm.plugins.ldapv3.LDAPv3Repo で LDAP 例外が発生しました。LDAP Error 65: The requested operation will add or change data so that the data no longer complies with the schema.このとき、OpenDJのログファイル(/opt/OpenDJ-2.5.0-Xpress1/logs/access)を見ると、以下のようなエラーが記録されてました。
OpenAMが使用するオブジェクトクラスが存在しないのでエラーになっているようです。
[09/3/2014:09:56:59 +0900] ADD RES conn=4 op=6 msgID=227 result=65 message="エントリ uid=xxxx,ou=people,dc=example,dc=com がディレクトリサーバースキーマ構成に違反しています。このエントリには不明なオブジェクトクラス sunAMAuthAccountLockout が含まれます" etime=2というわけで、OpenDJに、OpenAM用のスキーマをインポートします。
OpenAM用のスキーマは、OpenAMサーバにあります。
OpenAMサーバにログインして、下記2ファイルを、LDAPサーバに scp します。
# scp -p /var/lib/tomcat6/webapps/openam/WEB-INF/template/ldif/opendj/opendj_user_schema.ldif 192.168.1.95:/tmp/. # scp -p /var/lib/tomcat6/webapps/openam/WEB-INF/template/openfm/fam_sds_schema.ldif 192.168.1.95:/tmp/.LDAPサーバにログインして、以下のように ldapmodifyコマンドを実行してスキーマを追加します。
# cd /opt/OpenDJ-2.5.0-Xpress1/bin # ./ldapmodify --bindDN "cn=Directory Manager" --bindPassword password --filename /tmp/opendj_user_schema.ldif cn=schema の MODIFY 要求を処理しています DN cn=schema に対して MODIFY の操作が成功しました # ./ldapmodify --bindDN "cn=Directory Manager" --bindPassword password --filename /tmp/fam_sds_schema.ldif cn=schema の MODIFY 要求を処理しています DN cn=schema に対して MODIFY の操作が成功しましたOpenDJの管理画面で、[スキーマ管理] > [オブジェクトクラス] > [カスタム] をクリックすると、下図の画面が表示されます。
"inetuser"、"iplanet-*"などが追加されていればOKです。
2.OpenAMの設定変更
「 [CentOS6][OpenAM10] OpenAMを試す - OpenAMのシングルサインオン(SSO)を試す(2/4)」で設定したサブレルム(test01)を変更して、上記で構築したLDAPサーバを使用するように設定します。
2.1.データストア
OpenAM管理画面をひらき、[アクセス制御] > [レルム(test01)] > [データストア] をクリックすると、下図の画面が表示されます。
[データストア]欄の "embedded" をチェックして、[削除]ボタンをクリックします。
"embedded" はOpenAM内蔵のOpenDJです。レルム(test01)では、使わないので削除します。
[新規]ボタンをクリックします。
LDAPサーバのOpenDJを使用するように設定します。
[名前]を入力し、[タイプ]は、"OpenDJ" をクリックして、[次へ]ボタンをクリックします。
赤枠部分を入力して、[終了]ボタンをクリックします。
- [LDAPサーバ] ・・・ LDAPサーバのIPアドレス:LDAPポート番号
- [LDAPバインドDN] ・・・ 上記1.3の[ルートユーザDN]
- [パスワード] ・・・ [LDAPバインドDN]のパスワード
- [LDAP組織DN] ・・・ 上記1.3の[ディレクトリベースDN]
- [LDAPピープルコンテナ値] ・・・ デフォルト値を使用。上記1.4 も参照
- [持続検索ベースDN] ・・・ 上記1.3の[ルートユーザDN]
下図のように[データストア]欄に "OpenDJ" が表示されたらOKです。
データストアの設定が正しいかチェックします。
[対象]タブをクリックして、下図のようにエラーが表示されなければOKです。
現時点で LDAPサーバにはユーザを登録していないので、[ユーザ]欄には何も表示されません。
試しに、[新規]ボタンをクリックして、ユーザを登録してみます。
必須項目を入力して、[了解]ボタンをクリックします。
エラーメッセージが表示されずに、下図のように、ユーザが表示されたらOKです。
登録したユーザを削除したい場合は、ユーザ横のチェックボックスをクリックして、[削除]ボタンをクリックします。
2.2.LDAP認証
サブレルム(test01)でLDAP認証の設定をします。
[アクセス制御] > [レルム(test01)] > [認証] をクリックすると下図の画面が表示されます。
[モジュールインスタンス]欄の"LDAP" をクリックします。
赤枠部分を入力したら、[保存]ボタンをクリックして、[認証へ戻る]ボタンをクリックします。
- [プライマリLDAPサーバ] ・・・ LDAPサーバのIPアドレス:LDAPポート番号
- [ユーザ検索の開始DN] ・・・ 上記1.3の[ルートユーザDN]
- [バインドユーザのパスワード] ・・・ 上記1.3の[パスワード]
[保存]ボタンをクリックします。
以上で、LDAP認証の設定ができたので、正しく動作するか確認します。
OpenAM管理画面を開いているブラウザとは、異なるブラウザを起動して、下記URLにアクセスします。
このURLは、OpenAMログイン用です。レルム(test01)と認証モジュール(LDAP)を指定しています。
- http://exam01.example.com:8080/openam/UI/Login?realm=test01&module=LDAP
上記2.1で登録した user01 でログインします。
下図のように、user01 の画面が表示されたらLDAP認証は成功です。
次の認証連鎖の確認でも同様なことをするので、[ログアウト]ボタンをクリックしてログアウトしておきます。
2.3.認証連鎖
サブレルム(test01)で認証連鎖の設定して、最初にLDAP認証を使うようにします。
[アクセス制御] > [レルム(test01)] > [認証] をクリックすると下図の画面が表示されます。
[認証連鎖]欄の[新規]ボタンをクリックします。
[名称]を入力して、[了解]ボタンをクリックします。
[追加]ボタンをクリックすると、インスタンスが入力できるように1行増えます。
[インスタンス]は、"LDAP" を選択して、[条件]は、"必須"にして[保存]ボタンをクリックします。
[組織認証設定] を "SSO-1" にして、[保存]ボタンをクリックします。
以上で、認証連鎖の設定ができたので、OpenAMを再起動してから、正しく動作するか確認します。
# service tomcat6 restartOpenAM管理画面を開いているブラウザとは、異なるブラウザを起動して、下記URLにアクセスします。
このURLは、OpenAMログイン用です。レルム(test01)を指定しています。
- http://exam01.example.com:8080/openam/UI/Login?realm=test01
上記2.1で登録した user01 でログインします。
下図のように、user01 の画面が表示されたら認証連鎖は成功です。
2.4.サービス
PolicyAgent がLDAPサーバから属性値を取得するように設定します。
[アクセス制御] > [レルム(test01)] > [サービス] をクリックすると下図の画面が表示されます。
[サービス]欄の "ポリシー設定" をクリックします。
赤枠部分を入力して、[保存]ボタンをクリックします。
- [プライマリLDAPサーバ] ・・・ LDAPサーバのIPアドレス:LDAPポート番号
- [LDAPベースDN] ・・・ 上記1.3の[ルートユーザDN]
- [LDAPユーザベースDN] ・・・ 上記1.3の[ルートユーザDN]
- [OpenAMロールベースDN] ・・・ 上記1.3の[ルートユーザDN]
- [LDAPバインドパスワード] ・・・ 上記1.3の[パスワード]
ここを変更した場合、[アクセス制御] > [レルム] > [ポリシー]の設定をやり直す必要があるかもしれません。
3.動作確認
ブラウザで下記URLにアクセスして「テスト用WEBサイト」にアクセスします。
- http://exig01.example.com
LDAP認証に成功すると、下図の画面が表示されます。
「BASIC認証ページ」をクリックすると代理認証機能が働いてページが表示されます。
「フォーム認証ページ」の代理認証機能は、LDAPサーバの「姓(sn)」からパスワードを取得するように設定してあります。
現時点では、LDAPサーバの "user01" には、正しいパスワードを設定していないので、ログインに失敗しています。
OpenAM管理画面で[アクセス制御] > [レルム(test01)] > [対象] をクリックして、"user01" をクリックすると下図の画面が表示されます。
[姓]にフォーム認証用のパスワードを設定して、[保存]ボタンをクリックします。
再度、「フォーム認証ページ」にアクセスすると、下図のように代理認証に成功しました。
これで、LDAPサーバの値を参照していることが確認できました。
ちなみに、OpenDJの管理画面でユーザを見ると、下図のように参照できます。