Oracle® Fusion MiddlewareOracle Adaptive Access Manager開発者ガイド 11gリリース2 (11.1.2.3.0) E67356-01 |
|
前 |
次 |
Oracle Adaptive Access Managerには、構成可能なアクションが用意されています。ユーザーはこの機能を使用することにより、チェックポイント実行後に結果アクションまたはリスク・スコアリングあるいはその両方に基づいてトリガーされる新しい補足アクションを作成できます。この項では、構成可能なアクションをOracle Adaptive Access Managerソフトウェアに統合する方法について説明します。
この章では、次の内容を説明します。
新しい構成可能なアクションを追加するには、次のタスクを実行します。
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()
: このメソッドでは、構成可能なアクションで使用されるパラメータを戻すためのコードを記述する必要があります。返されるパラメータ配列のサイズが、パラメータの数と同じであることを確認してください。
execute()
: このメソッドでは、構成可能なアクションで必要とされるロジックを実行するコードを記述する必要があります。構成可能なアクションのパラメータ値は、actionParamValueMap
で渡されます。ここで、パラメータ名はキーで、RuntimActionParamValue
オブジェクトは値になります。適切なgetXXXValue()
メソッドを使用して、パラメータ値を取得します。
JARファイルを$ORACLE_IDM_HOME\oaam\cli\lib
フォルダからビルド・クラスパスに追加して、Oracle Adaptive Access Managerクラスを拡張または実装するカスタムJavaクラスをコンパイルします。
構成可能なアクションの実装を詳細にテストします。
構成可能なアクションはスタンドアロンJavaクラスであるため、JUnitフレームワークのユニット・テスト方法を使用してテストできます。
構成可能なアクションをテストするためのサンプルJUnitコードについては、第24.4項「サンプルJUnitコード」を参照してください。
Javaクラスをコンパイルし、コンパイル済クラス・ファイルのJARファイルを作成します。
Oracle Adaptive Access Managerを拡張またはカスタマイズして、カスタムJARファイルを追加します。Oracle Adaptive Access ManagerへのカスタムJARファイルの追加手順については、第7章「OAAM拡張共有ライブラリの使用によるOAAMのカスタマイズ」を参照してください。
OAAMサーバーとOAAM管理サーバーを再起動します。
OAAM管理にログインし、新しくデプロイされた構成可能なアクションのアクション定義エントリを作成します。
構成可能なアクションに必要なすべてのパラメータがユーザー・インタフェースに表示されていることを確認します。
新しく使用可能になった構成可能なアクションを必要なチェックポイントに追加して使用します。構成可能なアクションの構成の詳細は、『Oracle Adaptive Access Managerの管理』を参照してください。
構成可能なアクションを使用してチェーンを実装する際には、
それらのアクションが特定の順序で実行され、
アクション間でデータが共有されるようにできます。
注意: 構成可能なアクション間でデータを共有するにはJavaコードを記述する必要があるため、単純な構成作業よりも労力を要します。 |
構成可能なアクションを特定の順序で実行してデータを共有する手順は次のとおりです。
構成可能なアクションを同期アクションとして構成し、昇順で実行されるようにします。
注意: 構成可能なアクションは、トリガー基準が満たされる場合にのみ実行されます。そのため、トリガー基準が間違っていないことを確認してください。 |
データを共有するには、構成可能なアクションのexecute()
メソッドのactionContextMap
パラメータに対象データを挿入します。actionContextMap
はMap
であるため、共有されるデータを表すキーと値のペアが必要になります。
注意: 実装者は次の点に留意する必要があります。
|
actionContextMap
にキーが存在しないケースもコードで処理されることを確認します。他のアクションがactionContextMap
に値を挿入しない場合にエラーまたはNullPointerException
が発生しないよう、この手順を実行する必要があります。
構成可能なアクションがトリガーしていることをテストする手順は次のとおりです。
構成可能なアクションのコードの実行を識別する方法があることを確認します。ログ・ファイルまたはデータベースの1つのエントリを参照するという単純な確認で十分です。
OAAMサーバーで、oracle.oaam
ロガーに対してデバッグ・レベルのログを有効にします。
特定の構成可能なアクションのアクション・テンプレートを作成します。
認証前チェックポイントにアクションを追加します。この際、トリガー基準を0から1000のスコアとして指定します。
OAAMサーバーにユーザーとしてのログインを試みます。
OAAMサーバーのログで、エントリEnter: executeAction(): Executing Action Instance
を確認します。
エラーがない場合は、Exit: executeAction(): Action Instance
のような関連するログ文が表示されます。
エラーがある場合は、Error: executeAction()
のようなログ文が表示されます。
さらに、構成可能なアクションによって作成されたログ・エントリやデータベース・エントリを確認します。
動的アクションをテストするためのサンプル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 { } }
この項では、構成可能なアクション用のサンプル・コードを示します。
public class HelloWorldAction implements DynamicAction { private UserDefEnum valueTypeEnum = UserDefEnum.getEnum("value.type.enum"); public boolean execute(String sessionId, Date requestTime, Map ruleContextMap, VCryptRulesResult ruleResult, Map actionParamValueMap, Map actionContextMap) throws Exception { // TODO Auto-generated method stub System.out.println("Hello World!!"); return false; } public DynamicActionParamInfo[] getParameters() { DynamicActionParamInfo params[] = new DynamicActionParamInfo[3]; String paramName = "Sample Integer Parameter"; String description = "Integer Parameter Description"; String notes = "Integer Parameter Notes"; String promptLabel = "Integer Parameter"; int valueType = valueTypeEnum.getElementValue("int"); String defaultValue = "1"; params[0] = new DynamicActionParamInfo(); params[0].setParamName(paramName); params[0].setPromptLabel(promptLabel); params[0].setNotes(notes); params[0].setDescription(description); params[0].setValueType(valueType); params[0].setDefaultValue(defaultValue); paramName = "Sample String Parameter"; description = "String Parameter Description"; notes = "String Parameter Notes"; promptLabel = "String Parameter"; valueType = valueTypeEnum.getElementValue("string"); defaultValue = "Sample String value"; params[1] = new DynamicActionParamInfo(); params[1].setParamName(paramName); params[1].setPromptLabel(promptLabel); params[1].setNotes(notes); params[1].setDescription(description); params[1].setValueType(valueType); params[1].setDefaultValue(defaultValue); paramName = "Sample Boolean Parameter"; description = "Boolean Parameter Description"; notes = "Boolean Parameter Notes"; promptLabel = "Boolean Parameter"; valueType = valueTypeEnum.getElementValue("boolean"); defaultValue = "true"; params[2] = new DynamicActionParamInfo(); params[2].setParamName(paramName); params[2].setPromptLabel(promptLabel); params[2].setNotes(notes); params[2].setDescription(description); params[2].setValueType(valueType); params[2].setDefaultValue(defaultValue); return params; } }