プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle Access Management管理者ガイド
11g リリース2 (11.1.2.3) for All Platforms
E61950-08
目次へ移動
目次

前
次

58.8 EJBを保護するためのログイン・モジュールの構成

EJBを保護するようにログイン・モジュールを構成できます。

このタスクには、次の項で説明するように、サーバー側とクライアント側の両方の構成が含まれます。

ノート:

JBoss 6.x統合のための環境の準備を実行している場合、これらの手順は使用しません。

58.8.1 EJBを保護するためのサーバーの構成

サーバー側では、セキュリティ・ドメイン注釈をEJBに追加し、記述子をjboss.xmlに追加する必要があります。新規エントリもログイン・モジュールのJBossサーバー構成ファイルに追加します。

ロールに基づいてEJB、WebアプリケーションまたはWebサービスを保護するには、次のようにlogin-config.xmlに追加の構成を行う必要があります。

<module-option name="rolesParam">OAM_GROUPS</module-option>

ここで、OAM_GROUPSは、「JBossリソース保護のためのカスタム・ポリシーの作成」で構成したレスポンスです。

前のステップで構成したエージェントをまたは新規エージェントのいずれかを使用できます。

ノート:

新しいエージェントを使用するには、JBossホスト上の/agentディレクトリから、ObAccessClient.xmlを別のディレクトリにコピーする必要があります。

  1. ObAccessClient.xmlを次のようにコピーします(どちらか)。
    • コピー元: $WLS_HOME/middleware/user_projects/domains/base_domain/output/agent_name

    • コピー先: JBossホスト上のディレクトリ

  2. @SecurityDomain("oamrealm")注釈をEJBに追加します。たとえば、EJBクラスがDemoEJBの場合、次の注釈をコード・レベルで追加する必要があります。
    import org.jboss.security.annotation.SecurityDomain;
    
    @SecurityDomain("oamrealm")
    public class DemoEJB{ ... }
    

    @SecurityDomainの値として定義されているapplication-policy (この例ではoamrealm)が、oam_config.properties内のrealmnameプロパティに対して定義されている値と同じ値である必要があります。

  3. オプション: 次の記述子をjboss.xmlファイルに追加してセキュリティ・ドメインを定義します。
    META-INF/jboss.xml
    
    <jboss>
        <security-domain>java:/jaas/myother</security-domain>
    </jboss> 
    

    この記述子(myother)で定義されているapplication-policy名は、oam_config.properties内で定義されているrealmnameプロパティと同じ値である必要があります。

    ノート:

    セキュリティ・ドメイン注釈に関連付けられた名前は、ステップ4の説明に従って、使用するログイン・モジュールで指定する必要があります。関連項目: Access Managerポリシーを使用するためのJBossログイン・モジュールの構成

  4. JBossサーバーのログイン構成: ログイン・モジュール・クラス名のエントリを追加します。これは、ログイン・メカニズムの一部である必要があります。

    JBoss_install_dir\server\default\conf\login-config.xml

    <application-policy name="oamrealm"> 
      <authentication>
        <login-module code="oracle.security.am.agent.common.jaas.login.OAMLoginModule"
          flag="required">
          <module-option name="loginType">tokenBased</module-option>
          <module-option name="configPath">D:/agentconfig</module-option>
          <module-option name="rolesParam">OAM_GROUPS</module-option>
          <module-option name="publicAuthnResourceName">/Authen/Basic</module-option>
          <module-option name="publicAuthzResourceName">/Authen/SSOToken</module-option>
        </login-module>
      </authentication>
    </application-policy>
    

    ノート:

    application-policy要素内のname値は、oam_config.properties内で定義されているrealmnameプロパティと一致している必要があります。

  5. アプリケーションをデプロイします。
  6. 次のコマンドを使用してJBossを起動します。
    JBoss_install_dir\bin\run –b 0.0.0.0 
    

    「localhostではなくホスト名にアクセスするためのJBossサーバーの構成」を参照してください。

58.8.2 EJBを保護するためのクライアント側のログイン・モジュールの構成

クライアント・ログイン構成ファイルを作成できます。

構成するには、次のようにします。

  1. ObAccessClient.xmlを次のようにコピーします(どちらか)。
    • 新規エージェント: $MW_HOME/middleware/user_projects/domains/base_domain/output/agent_nameからエージェント・ホスト上のフォルダ。

    • 既存のエージェント: JBossホスト上の場所からエージェント・ホスト上の別のディレクトリ。

  2. クライアント・ホスト上で、次のようにクライアント・ログイン構成テキスト・ファイルを作成します。
    oamauth {
       oracle.security.am.agent.common.jaas.login.OAMLoginModule required
       loginType="usernamePassword	"
       configPath="D:/agentconfig"
       publicAuthzResourceName="/Authen/Basic"
       publicAuthzResourceName="/Authen/SSOToken";
    };
    
  3. 次のコードをエントリに追加し、ログイン・モジュールを構成してアイデンティティをEJBコンテナに伝播します。
    propagate {
       org.jboss.security.ClientLoginModule required
       restore-login-identity="true";
    };
    
  4. ファイルを保存します。

    ノート:

    リッチ・クライアントからEJBを起動している間にステップ5を実行し、Access Managerによって認証が実行され(Pure Java ASDKを使用)、資格証明をEJBアプリケーション・サーバーに伝播します。

  5. リッチ・クライアント: EJBをクライアント側から起動する前に次のコードをクライアント・コードに追加します。
    System.setProperty("java.security.auth.login.config", authFile);
    MyCallbackHandler handler = new MyCallbackHandler(<USERNAME>,<PASSWORD>);
    LoginContext lc = new LoginContext("oamauth", handler);
    lc.login();
    //Fetch the private credentials of type String.class
    Set<String> set = lc.getSubject().getPrivateCredentials(String.class);
    
    //Set the SSO Token in callback handler along with the username
    handler = new MyCallbackHandler(<USERNAME>, set.iterator().next());
    LoginContext lc2 = new LoginContext("propagate", handler);
    lc2.login();