| 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;
}
}