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 を入力します。