WebSphere Application Server, Version 6.1   
             オペレーティング・システム: AIX , HP-UX, Linux, Solaris, Windows, Windows Vista

             目次と検索結果のパーソナライズ化

Java Authentication and Authorization Service (JAAS) の許可

Java 2 Security アーキテクチャーはセキュリティー・ポリシーを使用して、 実行コードに与えるアクセス権を指定します。このアーキテクチャーは、コードを中心とする ものです。 コードの特性 (コードの発生元、デジタル署名がなされているか、 署名者は誰か、など) に基づいて許可が与えられます。 Java Authentication and Authorization Service (JAAS) では、 ユーザーを中心とする新規アクセス制御により、コード中心の既存のアクセス制御が強化されます。 許可は、実行されているコードとそのコードの実行者に基づいて与えられます。

JAAS 認証によりユーザー認証を行う場合、認証済みユーザーを表す subject が作成されます。 subject は、プリンシパルのセットから構成され、 各プリンシパルはそのユーザーの ID を表します。許可は、ポリシーで特定のプリンシパルに与えることができます。 ユーザーが認証されると、アプリケーションは、subject を 現行のアクセス制御コンテキストに関連付けることができます。 Java ランタイムは、セキュリティーが検査された後続の各オペレーションごとに、 ポリシーが、要求された許可を特定のプリンシパルにのみ与えるかどうかを自動的に判断します。与える場合は、 アクセス制御コンテキストに関連したサブジェクトに、指定されたプリンシパルのみが含まれる場合に、 その操作を行うことができます。

サブジェクトを現行のアクセス制御コンテキストに関連付けるには、 そのサブジェクトのクラスから静的 doAs メソッドを呼び出して、認証済みのサブジェクトと、 java.security.PrivilegedAction メソッドまたは java.security.PrivilegedExceptionAction メソッドを渡します。doAs メソッドは、指定された subject を現行のアクセス制御コンテキストに関連付け、 アクションから実行メソッドを呼び出します。実行メソッドのインプリメンテーションには、 指定した subject として実行されたコードがすべて含まれています。これにより、アクションは、 指定した subject として実行されます。

Java 2 Platform, Enterprise Edition (J2EE) プログラミング・モデルでは、エンタープライズ Bean またはサーブレットから Enterprise JavaBeans (EJB) メソッドを呼び出す場合、 そのメソッドは Run-As 設定により決まるユーザー ID を使用して実行されます。 J2EE バージョン 1.4 仕様では、EJB コードまたはサーブレット・コード内の Subject.doAs アクション・ブロックから Enterprise Bean を呼び出す場合に使用するユーザー ID は示されません。 論理拡張機能では、Subject.doAs アクション・ブロック内で EJB メソッドを呼び出す場合に、 サブジェクト内に指定された適切な ID を使用することになっています。

Subject.doAs アクションに Run-As ID 設定を上書きさせるのは、 JAAS プログラミング・モデルを J2EE ランタイム環境に統合する上で理想的な方法です。 ただし、JAAS では、Software Development Kit (SDK)、Java Technology Edition バージョン 1.3 以降で、 JAAS バージョン 1.0 以降のインプリメンテーションと Java 2 セキュリティー・アーキテクチャーを統合する際に、 問題が発生しました。アクセス制御コンテキストに関連付けられた subject は 、doPrivileged 呼び出しが Subject.doAs アクション・ブロック内で発生した場合、 その doPrivileged 呼び出しによりカットオフされます。この問題が解決されるまでは、 J2EE ランタイム環境での Subject.doAs アクションの正しい振る舞いを保証できる、 信頼性が高くてランタイム効率のよい方法はありません。

問題をわかりやすくするために、以下に例を示します。

Subject.doAs(subject, new java.security.PrivilegedAction() {
      Public Object run() {
           // Subject is associated with the current thread context
          java.security.AccessController.doPrivileged( new
              java.security.PrivilegedAction() {
                         public Object run() {
                         // Subject was cut off from the current
                         // thread context
         return null;
             }
       });
           // Subject is associated with the current thread context
         return null;
  }
});

上記のコード例では、Subject オブジェクトが、 現行スレッドのコンテキストに関連付けられています。doPrivileged アクション・ブロックの実行メソッド内で、 Subject オブジェクトはスレッドのコンテキストから除去されています。doPrivileged ブロックを終了した後、 Subject オブジェクトは現行スレッドのコンテキストにリストアされます。doPrivileged ブロックは、 実行パスのいずれの箇所へも配置可能であり、サーバー環境に頻繁に装備されるため 、doAs アクション・ブロックのランタイム動作の管理は困難です。

この問題を解決するため、WebSphere Application Server では WSSubject helper クラスにより、 前述のような J2EE EJB メソッド呼び出しに対する JAAS 許可を拡張しています。 WSSubject クラスは静的 doAs および doAsPrivileged メソッドを提供し、 これらは subject クラスと同じシグニチャーを持ちます。WSSubject.doAs メソッドはサブジェクトを現在実行されているスレッドに関連付けます。 そして、WSSubject.doAs および WSSubject.doAsPrivileged メソッドは、対応する Subject.doAs および Subject.doAsPrivileged メソッドを呼び出します。WSSubject.doAs および WSSubject.doAsPrivileged メソッドの終了時には、 オリジナルのクレデンシャルが復元され、実行スレッドに関連付けられます。

WSSubject クラスは Subject オブジェクトの代わりではなく、EJB メ ソッドの呼び出しに関する限り、 一貫性のあるランタイム動作を保証するための helper クラスです。

以下の例は、WSSubject.doAs メソッドのランタイム動作を示しています。

WSSubject.doAs(subject, new java.security.PrivilegedAction() {
      Public Object run() {
           // Subject is associated with the current thread context
          java.security.AccessController.doPrivileged( new
              java.security.PrivilegedAction() {
                      public Object run() {
                         // Subject was cut off from the current thread
                         // context.
         return null;
             }
       });
           // Subject is associated with the current thread context
         return null;
  }
});

Subject.doAs および Subject.doAsPrivileged メソッドは、J2EE ランタイム環境には組み込まれていません。Subject.doAs および Subject.doAsPrivileged アクション・ブロック内で 呼び出される EJB メソッドは、サブジェクト ID ではなく、Run-As 設定で指定された ID で実行されます。
  • WSLoginModuleImpl インスタンスと WSClientLoginModuleImpl インスタンスで生成される Subject オブジェクトには、 WSPrincipal インターフェースをインプリメントするプリンシパルが含まれています。WSPrincipal オブジェクトに getCredential メソッドを使用すると、WSCredential インターフェースをインプリメントするオブジェクトが 戻されます。Subject インスタンスの PublicCredentials リスト で、WSCredential オブジェクト・インスタンスを検索することもできます。 getCredential メソッドを使用するのではなく、 PublicCredentials リストから WSCredential オブジェクトを取得します。
  • WSSubject クラスの getCallerPrincipal メソッドは、 呼び出し元のセキュリティー ID を表すストリングを戻します。戻りの型は、 java.security.Principal EJBContext インターフェースの getCallerPrincipal メソッドとは異なります。
  • Java 2 コネクター (J2C) の DefaultPrincipalMapping モジュールによって生成される Subject オブジェクトには、 リソース・プリンシパルと PasswordCredentials リストが含まれています。リソース・プリンシパルは、RunAs ID を表します。
詳しくは、J2EE コネクター・セキュリティー を参照してください。



関連概念
Java Authentication and Authorization Service (JAAS)
関連タスク
ユーザーの認証
参照トピック    

ご利用条件 | フィードバック

最終更新: Jan 21, 2008 5:05:53 PM EST
http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/com.ibm.websphere.base.doc/info/aes/ae/rsec_jaasauthor.html