ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Adaptive Access Manager開発者ガイド
11gリリース2(11.1.2)
B71697-01
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

24 構成可能なアクションの開発

Oracle Adaptive Access Managerには、構成可能なアクションが用意されています。ユーザーはこの機能を使用することにより、チェックポイント実行後に結果アクションまたはリスク・スコアリングあるいはその両方に基づいてトリガーされる新しい補足アクションを作成できます。この項では、構成可能なアクションをOracle Adaptive Access Managerソフトウェアに統合する方法について説明します。

24.1 統合

新しい構成可能なアクションを追加するには、次のタスクを実行します。

  1. Javaインタフェースcom.bharosa.vcrypt.tracker.dynamicactions.intf.DynamicActionを実装して、構成可能なアクションを開発します。


    注意:

    この手順では、実装とは、Javaインタフェースcom.bharosa.vcrypt.tracker.dynamicactions.intf.DynamicActionで指定されている規定に基づいてJavaコードを記述することです。


    Javaインタフェースcom.bharosa.vcrypt.tracker.dynamicactions.intf.DynamicActionの実装時には、次の2つのメソッドをコーディングする必要があります。

    • getParameters(): このメソッドでは、構成可能なアクションで使用されるパラメータを戻すためのコードを記述する必要があります。返されるパラメータ配列のサイズが、パラメータの数と同じであることを確認してください。Oracle Adaptive Access Managerサンプル・アプリケーションの構成可能なアクションのサンプルJavaコードを参照してください。

    • execute(): このメソッドでは、構成可能なアクションで必要とされるロジックを実行するコードを記述する必要があります。構成可能なアクションのパラメータ値は、actionParamValueMapで渡されます。ここで、パラメータ名はキーで、RuntimActionParamValueオブジェクトは値になります。適切なgetXXXValue()メソッドを使用して、パラメータ値を取得します。

  2. JARファイルを$ORACLE_IDM_HOME\oaam\cli\libフォルダからビルド・クラスパスに追加して、Oracle Adaptive Access Managerクラスを拡張または実装するカスタムJavaクラスをコンパイルします。

  3. 構成可能なアクションの実装を詳細にテストします。

    構成可能なアクションはスタンドアロンJavaクラスであるため、JUnitフレームワークのユニット・テスト方法を使用してテストできます。

    構成可能なアクションをテストするためのサンプルJUnitコードについては、第24.4項「サンプルJUnitコード」を参照してください。

  4. Javaクラスをコンパイルし、コンパイル済クラス・ファイルのJARファイルを作成します。

  5. Oracle Adaptive Access Managerを拡張またはカスタマイズして、カスタムJARファイルを追加します。Oracle Adaptive Access ManagerへのカスタムJARファイルの追加手順については、第7章「OAAM拡張共有ライブラリの使用によるOAAMのカスタマイズ」を参照してください。

  6. OAAMサーバーとOAAM管理サーバーを再起動します。

  7. OAAM管理にログインし、新しくデプロイされた構成可能なアクションのアクション定義エントリを作成します。

  8. 構成可能なアクションに必要なすべてのパラメータがユーザー・インタフェースに表示されていることを確認します。

  9. 新しく使用可能になった構成可能なアクションを必要なチェックポイントに追加して使用します。構成可能なアクションの構成方法については、『Oracle Fusion Middleware Oracle Adaptive Access Manager管理者ガイド』を参照してください。

24.2 構成可能なアクションの特定の順序での実行およびデータ共有

構成可能なアクションを使用してチェーンを実装する際には、


注意:

構成可能なアクション間でデータを共有するにはJavaコードを記述する必要があるため、単純な構成作業よりも労力を要します。


構成可能なアクションを特定の順序で実行してデータを共有する手順は次のとおりです。

  1. 構成可能なアクションを同期アクションとして構成し、昇順で実行されるようにします。


    注意:

    構成可能なアクションは、トリガー基準が満たされる場合にのみ実行されます。そのため、トリガー基準が間違っていないことを確認してください。


  2. データを共有するには、構成可能なアクションのexecute()メソッドのactionContextMapパラメータに対象データを挿入します。actionContextMapMapであるため、共有されるデータを表すキーと値のペアが必要になります。


    注意:

    実装者は次の点に留意する必要があります。

    • データ挿入に重複するキーが使用されていないこと。

    • この共有データを別の構成可能なアクションからアクセスする場合でも同じキーが使用されること。


  3. actionContextMapにキーが存在しないケースもコードで処理されることを確認します。他のアクションがactionContextMapに値を挿入しない場合にエラーまたはNullPointerExceptionが発生しないよう、この手順を実行する必要があります。

24.3 構成可能なアクションのトリガーのテスト方法

構成可能なアクションがトリガーしていることをテストする手順は次のとおりです。

  1. 構成可能なアクションのコードの実行を識別する方法があることを確認します。ログ・ファイルまたはデータベースの1つのエントリを参照するという単純な確認で十分です。

  2. OAAMサーバーで、oracle.oaamロガーに対してデバッグ・レベルのログを有効にします。

  3. 特定の構成可能なアクションのアクション・テンプレートを作成します。

  4. 認証前チェックポイントにアクションを追加します。この際、トリガー基準を0から1000のスコアとして指定します。

  5. OAAMサーバーにユーザーとしてのログインを試みます。

  6. OAAMサーバーのログで、エントリEnter: executeAction(): Executing Action Instanceを確認します。

  7. エラーがない場合は、Exit: executeAction(): Action Instanceのような関連するログ文が表示されます。

  8. エラーがある場合は、Error: executeAction()のようなログ文が表示されます。

  9. これら以外にも、構成可能なアクション自体によって作成されたログ・エントリやデータベース・エントリを確認します。

24.4 サンプルのJUnitコード

動的アクションをテストするためのサンプルJUnitコードを次に示します。

public class TestDynamicActionsExecution extends TestCase {
        static Logger logger = Logger.getLogger(TestDynamicActionsExecution.class);
        private DynamicAction caseCreationAction = null;
 
 
        public void setUp()throws Exception {
                caseCreationAction = new CaseCreationAction();
    }
 
        public void testDynamicAction() {
 
                //RequestId
                String requestId = "testRequest";
 
                //Request Time
                Date requestTime = new Date();
 
                //Map that contains values passed to the rule/model execution
                Map ruleContextMap = new HashMap();
 
                //Result from rule execution
                VCryptRulesResultImpl rulesResult = new VCryptRulesResultImpl();
                rulesResult.setResult("Allow");
                rulesResult.setRuntimeType(new Integer(1));
 
                //Configurable action's parameter values
                Map actionParamValueMap = new HashMap();
                RuntimeActionParamValue caseTypeParamValue = new RuntimeActionParamValue();
                caseTypeParamValue.setIntValue(CaseConstants.CASE_AGENT_TYPE);
 
                RuntimeActionParamValue caseSeverityParamValue = new RuntimeActionParamValue();
                caseSeverityParamValue.setIntValue(1);
 
                RuntimeActionParamValue caseDescriptionParamValue = new RuntimeActionParamValue();
                caseDescriptionParamValue.setStringValue("Testing CaseCreation Action");
 
                //ActionContext Map for passing data to/from the dynamic action execution
                Map actionContextMap = new HashMap();
 
                //Execute the action
                try {
                        caseCreationAction.execute(requestId, requestTime, ruleContextMap, rulesResult, actionParamValueMap, actionContextMap);
                }catch(Exception e) {
                        Assert.fail("Exception occurred while executing dynamic action");
                        logger.error("Exception occcurred while executing dynamic action", e);
                }
 
                //Write appropriate asserts to check if the configurable action has executed properly
        }
 
    public void tearDown() throws Exception {
 
    }
}