8.4. OSGi コンテナーでの LDAP 認証の有効化
このセクションでは、OSGi コンテナーで LDAP レルムを設定する方法について説明します。新しいレルムはデフォルトの karaf
レルムを上書きするため、コンテナーは X.500 ディレクトリーサーバーに保存されているユーザーエントリーを基にしてクレデンシャルを認証します。
参考資料
以下は、LDAP 認証に関する詳細なドキュメントです。
- LDAPLoginModule オプション - 詳細については、「JAAS LDAP ログインモジュール」 を参照してください。
- その他のディレクトリーサーバーの設定 - 本チュートリアルは 389-DS のみを取り上げます。Microsoft Active Directory などの他の Directory Server を設定する方法について、詳細は 「さまざまなディレクトリーサーバーのフィルター設定」 を参照してください。
スタンドアロン OSGi コンテナーの手順
スタンドアロン OSGi コンテナーで LDAP 認証を有効にするには、以下を実行します。
- X.500 Directory Server が実行されていることを確認します。
ターミナルウィンドウで次のコマンドを入力し、Karaf コンテナーを起動します。
./bin/fuse
-
ldap-module.xml
という名前のファイルを作成します。 例8.1「スタンドアロン用の JAAS レルム」 を
ldap-module.xml
にコピーします。例8.1 スタンドアロン用の JAAS レルム
<?xml version="2.0" encoding="UTF-8"?> <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" xmlns:jaas="http://karaf.apache.org/xmlns/jaas/v1.0.0" xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0"> <jaas:config name="karaf" rank="200"> <jaas:module className="org.apache.karaf.jaas.modules.ldap.LDAPLoginModule" flags="required"> initialContextFactory=com.sun.jndi.ldap.LdapCtxFactory connection.url=ldap://localhost:389 connection.username=cn=Directory Manager connection.password=DIRECTORY_MANAGER_PASSWORD connection.protocol= user.base.dn=ou=People,dc=localdomain user.filter=(&(objectClass=inetOrgPerson)(uid=%u)) user.search.subtree=true role.base.dn=ou=Groups,dc=localdomain role.name.attribute=cn role.filter=(uniquemember=%fqdn) role.search.subtree=true authentication=simple </jaas:module> </jaas:config> </blueprint>
ldap-module.xml
ファイルで以下の設定をカスタマイズする必要があります。- connection.url
-
この URL を Directory Server インスタンスの実際の場所に設定します。通常、この URL の形式は
ldap://Hostname:Port
です。たとえば、389 Directory Server のデフォルトポートは IP ポート389
です。 - connection.username
-
Directory Server への接続を認証するために使用されるユーザー名を指定します。389 Directory Server の場合、デフォルトは通常
cn=Directory Manager
です。 - connection.password
- Directory Server への接続に使用するクレデンシャルのパスワード部分を指定します。
- 認証
認証プロトコルには、次のいずれかの選択肢を指定できます。
-
simple
の場合、ユーザークレデンシャルが提供され、connection.username
オプションおよびconnection.password
オプションを設定する義務があることを意味します。 none
の場合、認証が行われないことを意味します。この場合、connection.username
およびconnection.password
オプションを設定しないでください。このログインモジュールは、
karaf
という名前の JAAS レルムを作成します。これは、Fuse によって使用されるデフォルトの JAAS レルムと同じ名前です。0
より大きいrank
属性の値でこのレルムを再定義すると、ランク0
を持つ標準karaf
レルムがオーバーライドされます。LDAP を使用するように Fuse を設定する方法について、詳細は 「JAAS LDAP ログインモジュール」 を参照してください。
重要上記の JAAS プロパティーを設定するときは、プロパティー値を二重引用符で 囲まない でください。
-
新しい LDAP モジュールをデプロイするには、
ldap-module.xml
を Karaf コンテナーのdeploy/
ディレクトリー (ホットデプロイ) にコピーします。LDAP モジュールは自動的にアクティブ化されます。
注記その後、LDAP モジュールをアンデプロイする必要がある場合は、Karaf コンテナーの実行中 に
ldap-module.xml
ファイルをdeploy/
ディレクトリーから削除することで実行できます。
LDAP 認証のテスト
以下のように Karaf client
ユーティリティーを使用して実行中のコンテナーに接続し、新しい LDAP レルムをテストします。
- 新しいコマンドプロンプトを開きます。
-
Karaf
InstallDir/bin
ディレクトリーに移動します。 以下のコマンドを入力し、ID
jdoe
を使用して実行中のコンテナーインスタンスにログインします。./client -u jdoe -p secret
コンテナーのリモートコンソールに正常にログインする必要があります。コマンドコンソールで、
jaas:
と入力した後に [Tab] キーを押します (コンテンツ補完を使用)。jdoe@root()> jaas: Display all 31 possibilities? (31 lines)? jaas:cancel jaas:group-add ... jaas:whoami
jdoe
がすべてのjaas
コマンド (admin
と一致) にアクセスできることが確認できるはずです。-
logout
コマンドを入力して、リモートコンソールからログアウトします。 以下のコマンドを入力し、ID
janedoe
を使用して実行中のコンテナーインスタンスにログインします。./client -u janedoe -p secret
コンテナーのリモートコンソールに正常にログインする必要があります。コマンドコンソールで、
jaas:
と入力した後に [Tab] キーを押します (コンテンツ補完を使用)。janedoe@root()> jaas: Display all 25 possibilities? (25 lines)? jaas:cancel jaas:group-add ... jaas:users
janedoe
がほぼすべてのjaas
コマンド (manager
と一致) にアクセスできることが確認できるはずです。-
logout
コマンドを入力して、リモートコンソールからログアウトします。 以下のコマンドを入力し、ID
crider
を使用して実行中のコンテナーインスタンスにログインします。./client -u crider -p secret
コンテナーのリモートコンソールに正常にログインする必要があります。コマンドコンソールで、
jaas:
と入力した後に [Tab] キーを押します (コンテンツ補完を使用)。crider@root()> jaas: jaas:manage jaas:realm-list jaas:realm-manage jaas:realms jaas:user-list jaas:users
crider
は 5 つのjaas
コマンド (viewer
ロールと一致) のみにアクセスできることが確認できるはずです。-
logout
コマンドを入力して、リモートコンソールからログアウトします。
トラブルシューティング
LDAP 接続のテスト中に問題が発生した場合は、ログレベルを DEBUG
に引き上げ、LDAP サーバーへの接続で何が起こっているかを詳細にトレースします。
以下の手順を実行します。
Karaf コンソールから以下のコマンドを入力し、ログレベルを
DEBUG
に引き上げます。log:set DEBUG
Karaf ログをリアルタイムで観察します。
log:tail
ログリストからエスケープするには、Ctrl-C を入力します。