14.2.8. Java Authentication and Authorization Service (JAAS) について
サーバーグループ (管理対象ドメイン内) とサーバー (スタンドアロンサーバー内) にはセキュリティードメインの設定が含まれます。セキュリティードメインには、認証、承認、マッピング、監査のモジュールの組み合わせと設定詳細に関する情報が含まれています。アプリケーションは必要なセキュリティードメインを名前で jboss-web.xml
に指定します。
アプリケーション固有の設定は次の 4 つのファイルの 1 つ以上に設定されます。
表14.1 アプリケーション固有の設定ファイル
ファイル | 説明 |
---|---|
ejb-jar.xml |
EJB の
META-INF ディレクトリにある Enterprise JavaBean (EJB) アプリケーションのデプロイメント記述子です。ejb-jar.xml を使用してロールを指定し、アプリケーションレベルでプリンシパルへマッピングします。また、特定のメソッドやクラスを特定のロールへ制限することも可能です。セキュリティーに関係しない他の EJB 固有の設定に対しても使用できます。
|
web.xml |
Java Enterprise Edition (EE) の Web アプリケーションのデプロイメント記述子です。
web.xml を使用して、認証や承認にアプリケーションが使用するセキュリティードメインを宣言します。また、許可される HTTP リクエストのタイプを制限するなど、アプリケーションのリソースやトランスポートを制約するため使用することもできます。このファイルに簡単な Web ベースの認証を設定することもできます。セキュリティーに関係しない他のアプリケーション固有の設定に使用することもできます。
|
jboss-ejb3.xml | ejb-jar.xml 記述子への JBoss 固有の拡張が含まれます。
|
jboss-web.xml | web.xml 記述子への JBoss 固有の拡張が含まれます。
|
注記
ejb-jar.xml
と web.xml
は Java Enterprise Edition (Java EE) 仕様に定義されています。jboss-ejb3.xml
は ejb-jar.xml
の JBoss 固有の拡張を提供し、jboss-web.xml
は web.xml
の JBoss 固有の拡張を提供します。
Java Authentication and Authorization Service (JAAS) はプラグ可能認証モジュール (PAM) を使用した、 Java アプリケーションのユーザーレベルのセキュリティーに対するフレームワークです。JAAS は Java ランタイム環境 (JRE) に統合されます。JBoss Enterprise Application Platform では、コンテナ側のコンポーネントは org.jboss.security.plugins.JaasSecurityManager
MBean で、AuthenticationManager
インターフェースと RealmMapping
インターフェースのデフォルト実装を提供します。
JaasSecurityManager は JAAS パッケージを使用して AuthenticationManager と RealmMapping インターフェースの動作を実装します。JaasSecurityManager へ割り当てられたセキュリティードメインに設定されたログインモジュールインスタンスを実行するとこの動作が生じます。ログインモジュールはセキュリティードメインのプリンシパルの認証やロールマッピングの挙動を実装します。ドメインの異なるログインモジュール設定を組み込むと、異なるセキュリティードメイン全体で JaasSecurityManager を使用することができます。
EJBHome
を実装するメソッドのクライアント呼び出しの概要になります。EJB は既にサーバーにデプロイされ、EJBHome
インターフェースメソッドは ejb-jar.xml
記述子の <method-permission> 要素を使用してセキュアな状態になっています。jboss-ejb3.xml
ファイルの <security-domain> 要素に指定される jwdomain
セキュリティードメインを使用します。以下の図は後で説明する手順を表しています。

図14.1 保護された EJB メソッド呼び出しの手順
- クライアントが JAAS のログインを実行し、認証のプリンシパルと認証情報を確立します。上図では Client Side Login とラベル付けされます。JNDI より実行することも可能です。JAAS ログインを実行するには、LoginContext インスタンスを作成し、使用する設定の名前を渡します。ここでの設定名は
other
になります。このワンタイムログインは、ログインプリンシパルと認証情報を後続の EJB メソッド呼び出しすべてへ関連付けます。プロセスがユーザーを認証するとは限りません。クライアント側のログインの性質は、クライアントが使用するログインモジュール設定によって異なります。この例では、other
というクライアント側ログイン設定エントリーがClientLoginModule
ログインモジュールを使用します。サーバー上で後で認証が行われるため、このモジュールはユーザー名とパスワードを EJB 呼び出しレイヤーへバインドします。クライアントのアイデンティティーはクライアント上で認証されません。 - クライアントは
EJBHome
メソッドを取得し、このメソッドをサーバー上で呼び出します。呼び出しにはクライアントによって渡されたメソッド引数や、クライアント側 JAAS ログインからのユーザー ID や認証情報が含まれます。 - サーバー上では、セキュリティーインターセプターがメソッドを呼び出したユーザーを認証します。これには別の JAAS ログインが関係します。
- セキュリティードメインはログインモジュールの選択を決定します。セキュリティードメインの名前はログイン設定エントリー名として
LoginContext
コンストラクターへ渡されます。EJB セキュリティードメインはjwdomain
です。JAAS 認証に成功すると、JAAS サブジェクトが作成されます。JAAS サブジェクトには次の詳細を含む PrincipalSet が含まれます。- デプロイメントセキュリティー環境よりクライアントアイデンティティーへ対応する
java.security.Principal
インスタンス。 - ユーザーのアプリケーションドメインからのロール名が含まれる
Roles
と呼ばれるjava.security.acl.Group
。org.jboss.security.SimplePrincipal
タイプのオブジェクトはロール名を表します。これらのロールは、ejb-jar.xml
とEJBContext.isCallerInRole(String)
メソッド実装の制約に従って EJB メソッドへのアクセスを検証します。 - アプリケーションドメインの呼び出し側のアイデンティティーに対応する 1 つの
org.jboss.security.SimplePrincipal
が含まれるCallerPrincipal
という名前の任意のjava.security.acl.Group
。CallerPrincipal グループメンバーはEJBContext.getCallerPrincipal()
メソッドによって返される値です。このマッピングは、運用セキュリティー環境のプリンシパルがアプリケーションが認識するプリンシパルへマッピングできるようにします。CallerPrincipal マッピングが存在しない場合、運用プリンシパルはアプリケーションドメインプリンシパルと同じになります。
- EJB メソッドを呼び出しているユーザーは呼び出しが許可されているユーザーであることをサーバーが検証します。次の手順でこの承認を実行します。
- EJB コンテナから EJBメソッドへアクセスすることが許可されるロールの名前を取得します。呼び出されたメソッドが含まれるすべての <method-permission> 要素の
ejb-jar.xml
記述子 <role-name> 要素によってロール名が判断されます。 - 割り当てられたロールがなかったり、メソッドが exclude-list 要素に指定されている場合、メソッドへのアクセスは拒否されます。それ以外の場合は、セキュリティーインターセプターによってセキュリティーマネージャー上で
doesUserHaveRole
メソッドが呼び出され、呼び出し側に割り当てられたロール名の 1 つがあるかどうかを確認します。このメソッドはロール名より繰り返され、認証されたユーザーのSubject Roles
グループに割り当てられたロール名を持つ SimplePrincipal が含まれるか確認します。Roles グループメンバーのロール名がある場合はアクセスが許可されます。メンバーのロール名がない場合はアクセスが拒否されます。 - EJB がカスタムのセキュリティープロキシを使用する場合、メソッドの呼び出しはプロキシへ委譲されます。セキュリティープロキシが呼び出し側へのアクセスを拒否すると、
java.lang.SecurityException
がスローされます。それ以外の場合は EJB メソッドへのアクセスは許可され、メソッド呼び出しは次のコンテナインターセプターへ渡されます。SecurityProxyInterceptor はこのチェックを処理し、このインターセプターは表示されません。 - Web 接続要求の場合、
web.xml
で定義され、要求されたリソースとアクセスされた HTTP メソッドに一致するセキュリティー制約を Web サーバーがチェックします。要求に対して制約が存在する場合、Web サーバーは JaasSecurityManager を呼び出し、プリンシパルの認証を行います。これにより、確実にユーザーロールがプリンシパルオブジェクトへ関連付けられているようにします。