Negotiation ユーザーガイド
JBoss Enterprise Application Platform 5 向け
エディッション 5.1.2
概要
第1章 はじめに リンクのコピーリンクがクリップボードにコピーされました!
$JBOSS_HOME/jboss-as/common/lib/jboss-negotiation.jar に置かれています。
1.1. SPNEGO 認証プロセス リンクのコピーリンクがクリップボードにコピーされました!
- アプリケーションサーバーは KDC に対してサーバー自身を認証し、ユーザー認証できるようになる前にチケットを取得します。
- その後にのみ、サーバーはクライアントに対し認証のプロンプトを出します。クライアントは、SPNEGO トークンに応答し、サーバーはサーバー自体のチケットを使いクライアントのチケットを解読し、クライアントへ応答します。
- 必要であればクライアントは、サーバーにそれ自体を認証するようにリクエストすることができます。
- また、呼び出しているクライアントの代わりにサーバーが他のシステムを呼び出すことができるよう、クライアントはサーバーへ認証情報を委譲することができます。
- ユーザーが Active Directory ドメインや FreeIPA で統括されているログイン方法で、デスクトップコンピューターにログインする場合
- ユーザーが Web ブラウザーを開き、JBoss Negotiation を使う Web アプリケーションへアクセスする場合
- Web ブラウザーがデスクトップの認証情報を Web アプリケーションに転送する場合
重要
1.2. 設定概要 リンクのコピーリンクがクリップボードにコピーされました!
- JBoss Negotiation を利用できるようアプリケーションサーバーを設定 (2章設定 参照)。
- オプションで、JBoss Negotiation を使えるよう Active Directory あるいは FreeIPA を設定 (5章Microsoft Active Directory の設定 あるいは 6章FreeIPA の設定 参照)。
- JBoss Negotiation を使えるようクライアントの Web ブラウザーを設定 (7章Web ブラウザーの設定 参照)
- Negotiation Toolkit で設定をテスト (8章Negotiation Toolkit)
- JBoss Negotiation を利用できるよう Web アプリケーションを設定 (9章Web アプリケーションの設定 参照)。
重要
第2章 設定 リンクのコピーリンクがクリップボードにコピーされました!
- コアとなる認証メカニズムを拡張し JBoss Negotiation に対応します (SPNEGO 認証システムの追加)。
- アプリケーションのセキュリティドメインを定義し、アプリケーションがSPNEGOLoginModule 経由でアプリケーションサーバーと通信できるようにします。
- サーバーのセキュリティドメインを定義し、アプリケーションサーバーが KDC に対して初回認証を行えるようにします。
2.1. SPNEGO 認証システムの追加 リンクのコピーリンクがクリップボードにコピーされました!
SPNEGO 認証システムをコアの認証メカニズムに追加するには、以下を行います。
$JBOSS_HOME/server/PROFILE/deployers/jbossweb.deployer/META-INF/war-deployers-jboss-beans.xmlを開き編集します。authenticatorsプロパティの場所を特定します。- 以下のエントリをこのプロパティに追加します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow キーの値は任意ですが、Negotiation Toolkit を使い利用中のサーバー設定をテストしたい場合は、このツールは、この名前を持つ SPNEGO 認証システムでしか機能しないため、SPNEGO値を使うようにしてください。
2.2. サーバーのセキュリティドメインの定義 リンクのコピーリンクがクリップボードにコピーされました!
重要
$JBOSS_HOME/server/$PROFILE/conf/login-config.xmlファイルを開き編集します。- アプリケーションポリシーの要素を authentication 要素で定義します。この要素のオプションは以下のとおりです。
- storeKey
trueの場合は、Subject に秘密鍵がキャッシュされます (trueに設定)。- useKeyTab
trueの場合は、キーが keyTab ファイルからロードされます (trueに設定)。- principal
- この属性は、プリンシパルのフルネームを keyTab ファイルから取得するよう記述する必要があります。
- keyTab
- この属性は、keyTab ファイルへの完全パスとサーバーキーを定義します (サーバーと KDC の情報を暗号化するキー)。
- doNotPrompt
trueの場合は、パスワードのプロンプトが出てこないようにします。 (これはサーバーであるため、trueに設定)。- debug
trueの場合、システムは追加のデバッグ情報を STDOUT にログします。
例2.1 サーバーのセキュリティドメイン
2.3. アプリケーションのセキュリティドメインの定義 リンクのコピーリンクがクリップボードにコピーされました!
$JBOSS_HOME/jboss-as/server/$PROFILE/conf/login-config.xmlファイルを開き編集します。- 新しいアプリケーションポリシーを以下のチェーン設定で定義します。
- 以下のオプションを使った SPNEGOLoginModule とその設定
- <module-option name="password-stacking">useFirstPass</module-option>
- パスワードスタッキングオプションは、他のログインモジュールでクライアント側の認証をアクティベートします。
password-stackingオプションをuseFirstPassに設定し、まず、共有されているユーザー名がjavax.security.auth.login.name、パスワードがjavax.security.auth.login.passwordのものをモジュールが検索するようにします (詳細情報は、Password Stacking chapter in the Security Guideを参照)。 - <module-option name="serverSecurityDomain">DomainName</module-option>
- serverSecurityDomain オプションは、サーバーのセキュリティドメインを定義し、これにより、認証モジュール (Kerberos) とサーバー認証プロパティ (「サーバーのセキュリティドメインの定義」 参照) を定義します。
- 認証ユーザーのロールと設定オプションを返すログインモジュール。プロパティファイルからユーザーロールを取得する UsersRolesLoginModule あるいは GSSAPI に従う LDAP サーバーからユーザーロールを取得する AdvancedLdapLoginModule を利用することができます。詳細情報は、「ロールマッピング」 を参照してください。
例2.2 アプリケーションのセキュリティドメイン
SPNEGO と呼ばれるアプリケーションのセキュリティドメインを定義しました。
org.jboss.security.negotiation.spnego.SPNEGOLoginModuleは、SPNEGO ユーザー認証を提供します。org.jboss.security.auth.spi.UsersRolesLoginModuleは、SPNEGOLoginModule で認証されたユーザーロールを返します (ロールはユーザーのプロパティファイルからフィルタリングされます)。
2.4. ロールマッピング リンクのコピーリンクがクリップボードにコピーされました!
2.4.1. ユーザープロパティファイルでロールマッピングを設定 リンクのコピーリンクがクリップボードにコピーされました!
- アプリケーションのセキュリティドメインで、SPNEGO 認証の2番目のログインモジュールを
org.jboss.security.auth.spi.UsersRolesLoginModuleに設定 (例2.2「アプリケーションのセキュリティドメイン」 参照) し、モジュールオプションを渡します (セキュリティガイドの UsersRolesLoginModule 参照)。 $JBOSS_HOME/server/$PROFILE/conf/login-config.xmlファイルでアプリケーションのセキュリティドメインを定義している場合、$JBOSS_HOME/server/$PROFILE/conf/props/spnego-users.propertiesファイルでユーザーロールを定義します。以下のパターンを使ってください (fullyQualifiedUserName=comma-separatedListOfRoles)。例2.3 users.properties file
# A roles.properties file for use with the UsersRolesLoginModule darranl@KERBEROS.JBOSS.ORG=Users,Admins
# A roles.properties file for use with the UsersRolesLoginModule darranl@KERBEROS.JBOSS.ORG=Users,AdminsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.4.2. LDAP サーバーでロールマッピングを設定 リンクのコピーリンクがクリップボードにコピーされました!
注記
org.jboss.security.negotiation.AdvancedLdapLoginModule に設定します (例2.2「アプリケーションのセキュリティドメイン」 参照)。
- InitialLdapContext プロパティを定義します。これらのプロパティを使い LDAP との関係を取得します (「初期の LDAP コンテキストを GSSAPI で定義」 を参照。Java API の詳細は、http://download.oracle.com/javase/6/docs/api/javax/naming/ldap/InitialLdapContext.html を参照)。
- 識別名 (DN: Distinguished Name) プロパティを定義します。これらのプロパティを使い、LDAP サーバーで認証済みユーザーを検索します (「DN 検索の定義」 参照)。
- ロールの検索プロパティを定義します。これらのプロパティは、LDAP サーバー上のロール検索を管理しています (「ロール検索の定義」)。
2.4.2.1. 初期の LDAP コンテキストを GSSAPI で定義 リンクのコピーリンクがクリップボードにコピーされました!
- bindAuthentication
- 認証タイプを定義します (プロパティの値を
GSSAPIに設定し GSSAPI ベースの認証を利用します)。 - jaasSecurityDomain
- 接続に必要なサブジェクトを取得するのに利用するセキュリティドメインを定義します (必須のjaasSecurityDomainを定義する際の情報に関しては、「サーバーのセキュリティドメインの定義」 を参照)。
2.4.2.2. DN 検索の定義 リンクのコピーリンクがクリップボードにコピーされました!
- baseCtxDN
- コンテキストの固定 DN を定義しユーザーを検索します。これは、ユーザーが実際に置かれている場所の識別名 (DN) ではなく、ユーザーが含まれているオブジェクトが置かれている場所の DN という点を考慮します (つまり、Active Directory では、ユーザーアカウントを持つ DN ということになります)。
- baseFilter
- 認証ユーザーのコンテキストの場所を突き止めるために使う検索フィルターを定義します。ログインモジュールのコールバックから取得した通りの、入力ユーザー名/ユーザー DN は、
{0}表現を代入します。この代入動作は、標準のDirContext?.search(Name, String, Object[], SearchControls? cons) メソッドから来ています。一般的な検索フィルターの例は、(uid={0})です。 - searchTimeLimit
- ユーザーとロール検索のタイムアウト時間をミリ秒で定義します (デフォルトは 10000 で、10秒となっています)。
注記
baseCtxDN プロパティを省略します。提示したユーザー名をログインモジュールで DN として使います。
2.4.2.2.1. ユーザー認証 リンクのコピーリンクがクリップボードにコピーされました!
- allowEmptyPassword
- 空の (length==0) パスワードが LDAP サーバーに渡された場合。LDAP サーバーは空のパスワードを無名ログインとして処理します。このプロパティを
falseに設定し、空のパスワードを受け付けないようにするか、trueに設定し、LDAP サーバーが空のパスワードを認証できるようにします (デフォルトは、false)。
2.4.2.3. ロール検索の定義 リンクのコピーリンクがクリップボードにコピーされました!
重要
- rolesCtxDN
- コンテキストの固定 DN を定義しユーザーロールを検索します。これは、実際のロールが実際に置かれている場所の識別名 (DN) ではなく、ユーザーロールが含まれているオブジェクトが置かれている場所の DN という点を考慮します (つまり、Active Directory では、ユーザーアカウントを持つ DN ということになります)。
- roleFilter
- 認証済みユーザーロールの場所をつきとめるために利用する検索フィルターを定義します。ログインモジュールのコールバックから取得した入力ユーザ名/userDN はフィルター定義で
{0}表現を代入します。認証済み userDN は、フィルター定義で{1}を代入します。入力したユーザ名と一致する検索フィルターの例は、(member={0})です。もう1つは、認証済みの userDN に一致する場合で、(member={1})となっています。注記
roleFilter 属性を飛ばすと、ロール検索は UserDN を roleAttributeID 値を取得する DN として利用します。 - roleAttributeID
- ロール名に該当するコンテキストのロール属性名を定義します。roleAttributeIsDN プロパティが
trueに設定されている場合、このプロパティは、roleNameAttributeID 属性に対しクエリを行うコンテキストの DN となります。roleAttributeIsDN プロパティがfalseに設定されている場合、このプロパティは、ロール名の属性名となります。 - roleAttributeIsDN
- ロール属性がロールオブジェクトあるいはロール名の完全な識別名を含むか定義します。
falseの場合、ロール名はユーザーのロール属性の値から取得します。trueの場合、ロール属性はロールオブジェクトの識別名を表します。ロール名は、該当オブジェクトのroleNameAttributeId 属性の値から取得します。特定のディレクトリスキーマでは (Microsoft Active Directory など)、ユーザーオブジェクトのロール (グループ) 属性は、簡易名ではなく DN としてロールオブジェクトに保存されます。このような場合、このプロパティはtrueに設定します。このプロパティのデフォルト値はfalseです。 - roleNameAttributeID
- ロール名に該当するコンテキストのロール属性を定義します。roleAttributeIsDN プロパティが
trueに設定されている場合、このプロパティを使いロールオブジェクトの属性を検索します。また、roleAttributeIsDN property がfalseに設定されている場合、このプロパティは無視されます。 - recurseRules
- 再帰ロール検索を有効にするか定義します。ログインモジュールは、すでに追加済みのロールをトラッキングし、循環参照を処理します。
- searchScope
- 検索範囲を以下のいずれかに制限することができます (デフォルト値は
SUBTREE_SCOPE)。- OBJECT_SCOPE - 指定のロールコンテキストのみを検索します。
- ONELEVEL_SCOPE - 指定のロールコンテキストを直接検索します。
- SUBTREE_SCOPE - ロールコンテキストが DirContext? でない場合、オブジェクトのみを検索します。ロールコンテキストが DirContext? の場合、サブツリーは、指定のオブジェクトにルートを置き、そのオブジェクト自体を検索します。
- searchTimeLimit
- ユーザーとロール検索のタイムアウト時間をミリ秒で定義します (デフォルトは 10000 で、10秒となっています)。
注記
これらの検索は両方、同じ searchTimeLimit 設定を使います。
2.4.3. SPNEGO モジュールを使った LDAP 設定例 リンクのコピーリンクがクリップボードにコピーされました!
baseFilter 値以外は、FreeIPA と Active Directory の両方で同じです。この baseFilter は、SPNEGOLoginModule で識別される LDAP にて検索する名称を定義します (関連の ldiff dump については、「Active Directory 向けの完全 LDAP 認証」 と 「Free IPA 向けの完全 LDAP 認証」 を参照のこと)。
password-stacking プロパティが useFirstPass に設定されている点に注意してください。
2.4.3.1. FreeIPA でのチェーン設定 リンクのコピーリンクがクリップボードにコピーされました!
2.4.3.2. Active Directory でのチェーン設定 リンクのコピーリンクがクリップボードにコピーされました!
第3章 TRACE ロギング リンクのコピーリンクがクリップボードにコピーされました!
$JBOSS_HOME/server/$PROFILE/conf/jboss-log4j.xmlを開きます。- 以下を追加し、
org.jboss.securityの 完全 TRACE ロギングを有効にします。<category name="org.jboss.security"> <priority value="TRACE"/> </category>
<category name="org.jboss.security"> <priority value="TRACE"/> </category>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - オプションで、
com.sun.security.auth.module.Krb5LoginModuleログインモジュール用に追加のロギングを許可します。方法は、debugオプションをtrueにします。<module-option name="debug">true</module-option>
<module-option name="debug">true</module-option>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - システムプロパティ
-Dsun.security.krb5.debug=trueを設定し GSSAPI ネゴシエーションプロセス全体の詳細出力を取得します。
3.1. メッセージ追跡の設定 リンクのコピーリンクがクリップボードにコピーされました!
org.jboss.security.negotiation.MessageTrace です。TRACE ロギングをこのカテゴリーで有効にすると、全リクエストおよびレスポンスのメッセージが TRACE レベルで Hex および Base64 エンコーディングにてログに残されます。
例3.1 全メッセージの追跡設定
<category name="org.jboss.security.negotiation.MessageTrace"> <priority value="TRACE"/> </category>
<category name="org.jboss.security.negotiation.MessageTrace">
<priority value="TRACE"/>
</category>
.Request あるいは .Response を category 値に追加します。
例3.2 リクエストメッセージのみの追跡設定 (Hex および Base64 でメッセージをロギング)
<category name="org.jboss.security.negotiation.MessageTrace.Request"> <priority value="TRACE"/> </category>
<category name="org.jboss.security.negotiation.MessageTrace.Request">
<priority value="TRACE"/>
</category>
例3.3 レスポンスメッセージのみの追跡設定 (Hex および Base 64 でメッセージをロギング)
<category name="org.jboss.security.negotiation.MessageTrace.Response"> <priority value="TRACE"/> </category>
<category name="org.jboss.security.negotiation.MessageTrace.Response">
<priority value="TRACE"/>
</category>
.Hex あるいは .Base64 を category 値に追加します。
例3.4 定義したエンコーディングでメッセージを追跡
第4章 Authentication プロパティをサーバーへ渡す手順 リンクのコピーリンクがクリップボードにコピーされました!
- java.security.krb5.realm
- サーバーが認証を行う kerberos realm
- java.security.krb5.kdc
- KDC ホスト名
注記
4.1. コマンドラインからプロパティを渡す手順 リンクのコピーリンクがクリップボードにコピーされました!
run コマンドを実行します。
- Red Hat Enterprise Linux では、以下のコマンドを実行します。
./run.sh -Djava.security.krb5.realm=KERBEROS.JBOSS.ORG -Djava.security.krb5.kdc=kerberos.security.jboss.org
./run.sh -Djava.security.krb5.realm=KERBEROS.JBOSS.ORG -Djava.security.krb5.kdc=kerberos.security.jboss.orgCopy to Clipboard Copied! Toggle word wrap Toggle overflow - Windows では以下のコマンドを実行します。
run.bat Djava.security.krb5.realm=KERBEROS.JBOSS.ORG -Djava.security.krb5.kdc=kerberos.security.jboss.org
run.bat Djava.security.krb5.realm=KERBEROS.JBOSS.ORG -Djava.security.krb5.kdc=kerberos.security.jboss.orgCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.2. システムプロパティにプロパティを追加 リンクのコピーリンクがクリップボードにコピーされました!
$JBOSS_HOME/server/$PROFILE/deploy/properties-service.xml 記述子のプロパティを定義します。これらのプロパティが最初の認証試行の前にロードされるようにしてください (サーバーが完全に起動する前は、JBoss は受信 HTTP 接続を許可しません)。
jboss:type=Service,name=SystemProperties MBean に追加します。
<attribute name="Properties"> java.security.krb5.kdc=kerberos.security.jboss.org java.security.krb5.realm=KERBEROS.JBOSS.ORG </attribute>
<attribute name="Properties">
java.security.krb5.kdc=kerberos.security.jboss.org
java.security.krb5.realm=KERBEROS.JBOSS.ORG
</attribute>
4.2.1. 複数の KDC リンクのコピーリンクがクリップボードにコピーされました!
例4.1 複数の KDC でサーバーを起動
./run.sh -Djava.security.krb5.realm=KERBEROS.JBOSS.ORG:SLAVE_KDC.JBOSS.ORG -Djava.security.krb5.kdc=kerberos.security.jboss.org
./run.sh -Djava.security.krb5.realm=KERBEROS.JBOSS.ORG:SLAVE_KDC.JBOSS.ORG -Djava.security.krb5.kdc=kerberos.security.jboss.org
第5章 Microsoft Active Directory の設定 リンクのコピーリンクがクリップボードにコピーされました!
重要
- サーバーのユーザーアカウントを作成し、サービスプリンシパル名 (SPN: Service Principal Name) アカウントとして設定します。サービスプリンシパル名アカウント (SPN アカウント) のユーザーは、Kerberos サーバー、Active Directory、JBoss Web サーバーの間をつなげます。
- サーバーユーザー用に Keytab ファイルを生成し、アプリケーションサーバーにそのファイルをエクスポートします。アプリケーションサーバーは keytab を使い AD にて KDC を認証します。
重要
警告
5.1. アプリケーションサーバーのユーザーアカウント リンクのコピーリンクがクリップボードにコピーされました!
5.1.1. サーバーユーザーの作成 リンクのコピーリンクがクリップボードにコピーされました!
- スタート → → へ移動します。
- Active Directory ユーザーとコンピューター のウィンドウで、 → → へ移動します。
図5.1 新規ユーザー
- 新規ユーザー ウィンドウで、ユーザーの詳細を入力し、Next をクリックします。図5.1「新規ユーザー」 は
@vm104.gsslab.rdu.redhat.comサーバーを使い、testserverと呼ばれるユーザーを定義します。 - ユーザーのパスワードを入力し、ユーザーはパスワードを変更できない と パスワードを無期限にする を選択します。
重要
後にパスワードを変更すると keytab ファイルを無効にし、JBoss インストール設定が壊れてしまう可能性があるため、有効なパスワードを入力するようにします。図5.2 新規ユーザーのパスワード
- をクリックし、 を押します。
図5.3 新規ユーザーの終了
- Active Directory ユーザーとコンピューター のウィンドウで、ユーザーを右クリックし、 をクリックします。
- ユーザープロパティのウィンドウで、アカウントタブをクリックし、アカウントオプションのKerberos 事前認証を必要としない と このアカウントに DES 暗号化タイプを使う を選択されているか確認します。
図5.4 ユーザープロパティ
5.2. Keytab のエクスポート リンクのコピーリンクがクリップボードにコピーされました!
- ktpass コマンドを実行し、信頼済みホストとして作成したユーザーをマッピングし keytab ファイルを生成します。
-princオプションは、マッピング先のサービスプリンシパルを定義し、-mapuserオプションは、マッピング先のユーザーアカウントを定義します。ktpass -princ <service principal mapping> -out <target keytab file> -pass * -mapuser <user mapping>
ktpass -princ <service principal mapping> -out <target keytab file> -pass * -mapuser <user mapping>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例5.1 ktpass コマンド
ktpass -princ host/testserver@kerberos.jboss.org -out C:\testeserver.host.keytab -pass * -mapuser KERBEROS\testserver
ktpass -princ host/testserver@kerberos.jboss.org -out C:\testeserver.host.keytab -pass * -mapuser KERBEROS\testserverCopy to Clipboard Copied! Toggle word wrap Toggle overflow - プロンプトが出ると、ユーザーのパスワードを入力します。
- 以下のコマンドを実行し利用可能なマッピングを表示し、新規のマッピングが登録されているか確認します。
setspn.exe -l <user mapping>
setspn.exe -l <user mapping>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例5.2 setspn コマンド
setspn.exe -l testserver
setspn.exe -l testserverCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第6章 FreeIPA の設定 リンクのコピーリンクがクリップボードにコピーされました!
警告
- サーバーのサービスプリンシパルを作成し、HTTP サービスをそのプリンシパルに追加します。サーバーユーザーが FreeIPA と JBoss Web サーバー間をつなぎます。
- サーバーユーザー用に Keytab ファイルを生成し、アプリケーションサーバーにそのファイルをエクスポートします。アプリケーションサーバーは keytab を使い FreeIPA にて KDC を認証します。
注記
6.1. サービスプリンシパルの作成 リンクのコピーリンクがクリップボードにコピーされました!
注記
- 最も簡単にサービスプリンシパルを作成するには、FreeIPA WebUI を利用します。このツールへ管理者としてアクセスしてください。
Add Service Principalリンクをクリックします。図6.1 サービスプリンシパルの追加
- ホスト名をご利用中のサーバーのホスト名 (
test_server.jboss.org) に、サービスタイプをHTTPに設定し をクリックします。図6.2 サービスプリンシパルの表示
注記
サービスプリンシパルを作成するには、ホスト名を DNS とマッピングする必要があります。この手順に失敗した場合、コマンドラインからipa-addservice HTTP/test_server.jboss.org@JBOSS.ORG --forceコマンドを実行しプリンシパルを作成してください。
6.2. Keytab のエクスポート リンクのコピーリンクがクリップボードにコピーされました!
警告
- Kerberos Ticket-granting ticket (TGT) を管理者用に取得します。これには、
ipa-addservice HTTP/test_server.jboss.org@JBOSS.ORG --forceコマンドを実行します。 - keytab を取得するには、以下のオプションをつけ、
ipa-getkeytabコマンドを実行します。- -s
- keytab 取得元の FreeIPA サーバー
- -p
- 完全なプリンシパル名の非レルム部分
- -k
- keytab を添付するファイル
図6.3 Keytab の取得
第7章 Web ブラウザーの設定 リンクのコピーリンクがクリップボードにコピーされました!
注記
/etc/hosts ファイルを編集し、このファイルが確実にホスト名検索に利用されるようにしてください。Windows では、C:\windows\system32\drivers\etc\hosts を編集します。DNS サーバー上でもローカルのクライアントマシン上でも、この変更を加えることができます。
KERBEROS.JBOSS.ORG で、サーバーがホストする JBoss がtestserver であれば、信頼済みホストとして追加する必要のある IP アドレスは testserver.kerberos.jboss.org です。
7.1. Internet Explorer の設定 リンクのコピーリンクがクリップボードにコピーされました!
Local intranet にあるサイトに対してのみSPNEGO 認証を実行します。SPNEGO ネゴシエーションを有効にするには、JBoss のサーバー URL をローカルのイントラネットサイトに追加します。
- メニューで、 をクリックします。
図7.1 ツール - インターネットオプション
インターネットオプションのダイアログで、セキュリティタブをクリックします。セキュリティタブで、ローカルイントラネットアイコンが選択されているか確認し、ボタンをクリックします。図7.2 インターネットオプション
Local intranetダイアログで、JBoss がインストールされているサーバーの URL を入力し、をクリックします。図7.3 ローカルイントラネット
Web サイト リストに表示されます。Internet Explorer は、JBoss インストール設定を信頼し、SPNEGO ネゴシエーションを実行します。Basic Negotiation サーブレットを使い Negotiation をテストするようにしてください (「Basic Negotiation」 参照)。
7.2. Firefox の設定 リンクのコピーリンクがクリップボードにコピーされました!
- Firefox の設定オプションで、about:config URL へ移動します。
- フィルターを
network.negotiateに設定し該当のオプションを表示します。図7.4 Firefox の設定
network.negotiate-auth.delegation-urisをダブルクリックし、Enter string valueダイアログで、SPNEGO ネゴシエーションの URI を入力します。URI は URI の一部http://やtestserverでも、全部 (例:http://testserver.jboss.org) でも入力することもできます。図7.5 Firefox の設定
重要
network.negotiate-auth.delegation-urisオプションは ユーザー認証の委譲先の URI を指定します。JBoss Negotiation のこのバージョンでは、委譲には対応していません。
Value カラムに表示され、Firefox が JBoss インストール設定を信頼し、SPNEGO ネゴシエーションを実施するようになります。Basic Negotiation サーブレットを使い Negotiation をテストするようにしてください (「Basic Negotiation」 参照)。
図7.6 Firefox Negotiation Toolkit
第8章 Negotiation Toolkit リンクのコピーリンクがクリップボードにコピーされました!
jboss-negotiation-toolkit.war ファイルは https://repository.jboss.org/nexus/content/groups/public/org/jboss/security/jboss-negotiation-toolkit/2.0.3.SP1/jboss-negotiation-toolkit-2.0.3.SP1.war から入手できます。ファイルを$JBOSSHOME/server/$PROFILE/deploy ディレクトリにコピーし Negotiation Toolkit をデプロイします。
SPNEGO で、アプリケーションのセキュリティドメインも SPNEGO と、仮定しています。いずれかが別の名前の場合、Web アプリケーションを展開アーカイブとしてデプロイし、 web.xml と jboss-web.xml を変更してください。
WEB-INF/web.xmlファイルで、auth-methodの認証システムキーをアップデートします (<auth-method>SPNEGO</auth-method>)。WEB-INF/jboss-web.xmlファイルで、security-domainのセキュリティドメイン名をアップデートします(<security-domain>SPNEGO</security-domain>)。
注記
8.1. 最初のページ リンクのコピーリンクがクリップボードにコピーされました!
図8.1 Negotiation Toolkit の最初のページ
注記
8.2. Basic Negotiation リンクのコピーリンクがクリップボードにコピーされました!
図8.2 Basic Negotiation に失敗
図8.3 Basic Negotiation に成功
8.3. Security Domain Test リンクのコピーリンクがクリップボードにコピーされました!
host を使っており、ページは 図8.4「Security Domain Test」 で表示されているようになります)。
図8.4 Security Domain Test
図8.5 Security Domain Test - Authenticated
8.4. Secured リンクのコピーリンクがクリップボードにコピーされました!
図8.6 Secured
第9章 Web アプリケーションの設定 リンクのコピーリンクがクリップボードにコピーされました!
- SPNEGO セキュリティドメインを
WEB-INF/jboss-web.xmlファイルに追加します。<jboss-web> <security-domain>java:/jaas/SPNEGO</security-domain> </jboss-web>
<jboss-web> <security-domain>java:/jaas/SPNEGO</security-domain> </jboss-web>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - SPNEGO 認証を使うには、
login-config.xmlファイルを設定します。<login-config> <auth-method>SPNEGO</auth-method> <realm-name>SPNEGO</realm-name> </login-config>
<login-config> <auth-method>SPNEGO</auth-method> <realm-name>SPNEGO</realm-name> </login-config>Copy to Clipboard Copied! Toggle word wrap Toggle overflow auth-method は、認証システムで使用するキーをマッピングします。
付録A 高度な LDAP ログインモジュール:完全 LDAP 認証 リンクのコピーリンクがクリップボードにコピーされました!
A.1. 設定 リンクのコピーリンクがクリップボードにコピーされました!
org.jboss.security.negotiation.AdvancedLdapLoginModule です。
警告
org.jboss.security.negotiation.spnego.AdvancedLdapLoginModule でした。今でもログインモジュールは、この名前で利用できますが、廃止予定で今後のリリースでは削除されます。
useFirstPass に設定されているようにしてください。
A.1.1. 初期の LDAP コンテキストを定義 リンクのコピーリンクがクリップボードにコピーされました!
注記
- bindDN
- LDAP サーバーにバインドするために利用する DN を定義します。定義済みの baseCtxDN および rolesCtxDN への読み取り/検索の権限を持つ DN です。
- bindCredential
- bindDN パスワードを定義します。jaasSecurityDomain を指定している場合は、このパスワードは暗号化可能です。
- jaasSecurityDomain
- jaasSecurityDomain の JMX ObjectNameを定義します。これは、java.naming.security.principal を復号化する際に利用する jaasSecurityDomain です。このドメインの JaasSecurityDomain#encrypt64(byte[]) メソッドは、暗号化されたパスワードを返します。org.jboss.security.plugins.PBEUtils を使い、暗号化形式を生成することも可能です。
A.1.2. DN 検索の定義 リンクのコピーリンクがクリップボードにコピーされました!
- baseCtxDN
- コンテキストの固定 DN を定義しユーザーロールを検索します。これは、実際のロールが実際に置かれている場所の識別名 (DN) ではなく、ユーザーロールが含まれているオブジェクトが置かれている場所の DN という点を考慮します (つまり、Active Directory では、ユーザーアカウントを持つ DN ということになります)。
- baseFilter
- 認証ユーザーのコンテキストの場所を突き止めるために使う検索フィルターを定義します。ログインモジュールのコールバックから取得した通りの、入力ユーザー名/ユーザー DN は、
{0}表現を代入します。この代入動作は、標準のDirContext?.search(Name, String, Object[],SearchControls? cons) メソッドから来ています。一般的な検索フィルターの例は、(uid={0})です。 - searchTimeLimit
- ユーザーとロール検索のタイムアウト時間をミリ秒で定義します (デフォルトは 10000 で、10 秒となっています)。
注記
baseCtxDN プロパティを省略します。提示したユーザー名をこのログインモジュールで DN として使います。
A.1.3. ユーザー認証 リンクのコピーリンクがクリップボードにコピーされました!
注記
- allowEmptyPassword
- 空の (length==0) パスワードが LDAP サーバーに渡された場合。LDAP サーバーは空のパスワードを無名ログインとして処理します。このプロパティを
falseに設定し、空のパスワードを受け付けないようにするか、trueに設定し、LDAP サーバーが空のパスワードを認証できるようにします (デフォルトは、false)。
A.1.4. ロール検索の定義 リンクのコピーリンクがクリップボードにコピーされました!
重要
- rolesCtxDN
- コンテキストの固定 DN でユーザーロールを検索します。これは、実際のロールが実際に置かれている場所の識別名 (DN) ではなく、ユーザーロールが含まれているオブジェクトが置かれている場所の DN という点を考慮します (例:Active Directory では、ユーザーアカウントを持つ DN ということになります)。
- roleFilter
- 認証済みユーザーに紐付けられたロールの場所をつきとめるために利用する検索フィルターを定義します。ログインモジュールのコールバックから取得した入力ユーザ名/userDN はフィルター定義で
{0}表現を代入します。認証済み userDN は、フィルター定義で{1}を代入します。入力したユーザ名と一致する検索フィルターの例は、(member={0})です。もう1つは、認証済みの userDN に一致する場合で、(member={1})となっています。注記
roleFilter 属性を飛ばすと、ロール検索は UserDN を roleAttributeID 値を取得する DN として利用します。 - roleAttributeID
- ロール名に該当するコンテキストのロール属性を定義します。roleAttributeIsDN プロパティが
trueに設定されている場合、このプロパティは、roleNameAttributeID 属性に対しクエリを行うコンテキストの DN となります。roleAttributeIsDN プロパティがfalseに設定されている場合、このプロパティは、ロール名の属性名となります。 - roleAttributeIsDN
- ロール属性がロールオブジェクトあるいはロール名の完全な識別名を含むか定義します。
falseの場合、ロール名はユーザーのロール属性の値から取得します。trueの場合、ロール属性はロールオブジェクトの識別名を表します。ロール名は、該当オブジェクトのroleNameAttributeId 属性の値から取得します。特定のディレクトリスキーマでは (Microsoft Active Directory など)、ユーザーオブジェクトのロール (グループ) 属性は、簡易名ではなく DN としてロールオブジェクトに保存されます。このような場合、このプロパティはtrueに設定します。このプロパティのデフォルト値はfalseです。 - roleNameAttributeID
- ロール名に該当するコンテキストのロール属性を定義します。roleAttributeIsDN プロパティが
trueに設定されている場合、このプロパティを使いロールオブジェクトの属性を検索します。また、roleAttributeIsDN property がfalseに設定されている場合、このプロパティは無視されます。 - recurseRules
- 再帰ロール検索を有効にします。ログインモジュールは、すでに追加済みのロールをトラッキングし、循環参照を処理します。
- searchScope
- 検索範囲を以下のいずれかに設定することができます (デフォルト値は
SUBTREE_SCOPE)。- OBJECT_SCOPE - 指定のロールコンテキストのみを検索します。
- ONELEVEL_SCOPE - 指定のロールコンテキストを直接検索します。
- SUBTREE_SCOPE - ロールコンテキストが DirContext? でない場合、オブジェクトのみを検索します。ロールコンテキストが DirContext? の場合、サブツリーは、指定のオブジェクトにルートを置き、そのオブジェクト自体を検索します。
- searchTimeLimit
- ユーザーとロール検索のタイムアウト時間をミリ秒で定義します (デフォルトは 10000 で、10 秒となっています)。
注記
これらの検索は両方、同じ searchTimeLimit 設定を使います。
A.2. 完全 LDAP 認証の例 リンクのコピーリンクがクリップボードにコピーされました!
sAMAccountName 属性を使い、FreeIPA 上では uid 属性を使い、ユーザーを検索します。
cn 属性をグループから読み取るよう指定します。ログインモジュールは、このロールを返します。
true に設定されているため、検索で発見したグループからの DN を使いこのプロセスを繰り返します。そのため、グループが memberOf 属性で設定されている場合、これは再帰的に利用されすべてのロールを検索していきます。
A.2.1. Active Directory 向けの完全 LDAP 認証 リンクのコピーリンクがクリップボードにコピーされました!
A.2.2. Free IPA 向けの完全 LDAP 認証 リンクのコピーリンクがクリップボードにコピーされました!
付録B 改訂履歴 リンクのコピーリンクがクリップボードにコピーされました!
| 改訂履歴 | |||
|---|---|---|---|
| 改訂 5.1.2-2.400 | 2013-10-31 | ||
| |||
| 改訂 5.1.2-2 | 2012-07-18 | ||
| |||
| 改訂 5.1.2-100 | Thu 8 December 2011 | ||
| |||