以下のサンプル コード スニペットをアプリケーション コードに挿入して、RiskFort のリスク評価および事後評価の機能をテストすることができます。
/* RiskFort Transaction API にインポートするパッケージ */
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Map;
import java.util.HashMap;
import com.arcot.riskfortAPI.DeviceContext;
import com.arcot.riskfortAPI.LocationContext;
import com.arcot.riskfortAPI.PostEvaluateResponse;
import com.arcot.riskfortAPI.RiskAssessment;
import com.arcot.riskfortAPI.RiskException;
import com.arcot.riskfortAPI.RFSDKException;
import com.arcot.riskfortAPI.RiskFactory;
import com.arcot.riskfortAPI.RiskXActionAPI;
import com.arcot.riskfortAPI.TransactionContext;
import com.arcot.riskfortAPI.UserContext;
import com.arcot.riskfortAPI.AdditionalInputs;
public class Assess_Risk {
// この例の値は、サンプルで使用するためにハード コーディングされたものです。
public static void main(String[] args) {
/*
initialize:
入力プロパティ ファイルから API オブジェクトを初期化します。
initialize() はアプリケーションのスタートアップ時に一度だけ呼び出す必要があります。
以下にプロパティ ファイルのフィールドおよびフォーマットを示します。
HOST.1=RiskFort サーバの IP アドレス
PORT.1=RiskFort サーバのポート番号
TRANSPORT_TYPE = 接続タイプ。 使用可能な値は TLS または TCP です。
CA_CERT_FILE = TRANSPORT_TYPE = TLS の場合に必要な CA 証明書ファイル。 サーバ CA 証明書(PEM 形式)のファイル パス。
public static synchronized void initialize(String propertyLocation)
throws IOException, RiskException;
パラメータ:
propertyLocation - クラス パスに対してパラメータとして渡すロケーションを示します。
<code>null</code> が渡された場合は、デフォルトのロケーションである properties/riskfort.risk-evaluation.properties が使用されます。
戻り値:
スローする値:
RiskException - 何らかの理由でリクエストが失敗した場合。
IOException
*/
// 入力プロパティ ファイルから API オブジェクトを初期化するためのサンプル コード。
// RiskXActionAPI オブジェクトを作成します。
RiskXActionAPI api = null;
String propertiesFileLocation = "/properties/riskfort.risk-evaluation.properties";
try {
System.out.println("Initializing RiskFort API using " + propertiesFileLocation);
// 入力プロパティ ファイルから RiskXActionAPI オブジェクトを初期化します。
RiskFactory.initialize(propertiesFileLocation);
// 以前に初期化されている RiskXActionAPI オブジェクトを取得します。
api = RiskFactory.getRiskXActionAPI();
System.out.println("RiskFort API initialized.");
}
catch (IOException e) {
// 適切なアクションを実行します。
}
catch (RFSDKException e) {
/* UserRepositoryException オブジェクトに対して以下のメソッドを使用し、エラー コードおよびエラー メッセージを以下のように取得できます。
* 文字列コード = e.getErrorCode();
* 文字列メッセージ = e.getMessage();
*/
System.out.println("Exception during initialize.");
/* System.out.println("Error code: " + e.getErrorCode()); */
System.out.println("Error message: " + e.getMessage());
/* 以下のエラー コードが API によって返されます。 */
/* ERRCODE_INVALID_INPUT
* これには、2 つの理由が考えられます。
* 1. 考えられる理由:
* プロパティ ファイルに指定されたトランスポートのタイプが無効です。
* 考えられるアクション:
* 「riskfort.risk-evaluation.properties」ファイルに有効なトランスポートのタイプを指定します。
* 2. 考えられる理由:
* プロパティ ファイルで TRANSPORT_TYPE=TLS の場合、TLS に使用されたプライマリ キー ファイルが見つかりませんでした。
* 考えられるアクション:
* プライマリ キー ファイルへのパスが正確であることを確認します。
*/
/* ERRCODE_RISKXACTIONAPI_ALREADY_INITIALIZED
* 考えられる理由:
* 初期化している API はすでに初期化されています。
* 考えられるアクション:
* RiskXActionAPI オブジェクトを取得してトランザクションを続行します。
*/
/* ERROR_CONF_INVALID_POOL
* 考えられる理由:
* RiskFort サーバにライブ接続のプールを作成できません。
* 考えられるアクション:
*
*/
/* ERROR_CONF_NOT_AVAILABLE
* これには、2 つの理由が考えられます。
* 1. 考えられる理由:
* プロパティ ファイルを読み取ることができませんでした。
* 考えられるアクション:
* プロパティ ファイルへのパスが正確であることを確認します。
* 2. 考えられる理由:
* サーバ証明書のルート CA が無効です。
* 考えられるアクション:
* 有効なサーバ証明書を取得します。
*/
}
/*
evaluateRisk:
トランザクションに関連付けられたリスクを評価し、適宜アドバイスを返します。 また、新しい DeviceId も提供します。
呼び出しアプリケーションによって行われるアクションを以下に示します。
1. 出力 DeviceId をユーザのマシンに何らかの形式で保存する必要があります。 最も一般的な方法は、それを HTTP cookie として保存することです。 ただし、HTTP cookie として保存すると、マシン上のすべての cookie が削除される場合に一緒に削除されてしまう危険があります。
2. ユーザのマシンから DeviceId を取得し、それを setDeviceID を使用して設定します。
3. RiskAdvice が INCREASEAUTH の場合は、2 回目認証を実行し、2 回目の認証の結果を PostEvaluate を使用して RiskFort に渡します。
public RiskAssessment evaluateRisk(java.lang.String callerId,
DeviceContext deviceContext,
LocationContext locationContext,
UserContext userContext,
TransactionContext transactionContext,
AdditionalInputs additionalInputs)
throws RiskException
パラメータ:
callerId - アプリケーション自体のトラッキング目的で API を呼び出すアプリケーションによって決定される識別子。
deviceContext - デバイス コンテキストの情報。
locationContext - ロケーション コンテキストの情報(IP アドレス)。
userContext - ユーザ コンテキスト情報。
transactionContext - トランザクション コンテキスト情報。
additionalInputs - 別の操作で必要になる可能性がある追加の入力。
戻り値:
RiskAssessment - RiskAdvice、ユーザのマシンに配置する必要のある新しい DeviceId、RiskScore およびその他のトランザクションの関連情報が含まれています。
スローする値:
RiskException - 何らかの理由でリクエストが失敗した場合。
*/
// トランザクションに関連付けられたリスクを評価するためのサンプル コード。
RiskAssessment riskAssessment = null;
System.out.println("The following information is used to assess the risk associated with the transaction.");
// リスク評価に使用されるコンテキストを構築します。
String callerId = "MyApplicationTrackingId"; // string used by the calling application for tracking across calls.
// 入力ユーザ関連情報。
UserContext userContext = new UserContext();
// ユーザの一意の識別子。 たとえば、銀行の場合はユーザの銀行口座番号です。
userContext.setUserId("TestUser");
userContext.setOrg("DEFAULTORG");
System.out.println("Username: " + userContext.getUserID());
System.out.println("Organization Name:" + userContext.getOrg());
// 入力デバイス関連情報
DeviceContext deviceContext = new DeviceContext();
// JSON 署名は json.js から取得されます。
String jsonSignature = "{\"navigator\":{\"platform\":\"Win32\",\"appName\":\"Netscape\",\"appCodeName\":\"Mozilla\",\"appVersion\":\"5.0 (Windows; en-US)\",\"language\":\"en-US\",\"oscpu\":\"Windows NT 5.0\",\"vendor\":\"\",\"vendorSub\":\"\",\"product\":\"Gecko\",\"productSub\":\"20070312\",\"securityPolicy\":\"\",\"userAgent\":\"Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.8.0.11) Gecko/20070312 Firefox/1.5.0.11\",\"cookieEnabled\":true,\"onLine\":true},\"plugins\":[{\"name\":\"Adobe Acrobat Plugin\",\"version\":\"7.00\"},{\"name\":\"Macromedia Director\",\"version\":\"10.1\"},{\"name\":\"Windows Media Player Plug-in Dynamic Link Library\",\"version\":\"\"},{\"name\":\"Macromedia Shockwave Flash\",\"version\":\"9.0\"},{\"name\":\"Java Virtual Machine\",\"version\":\"1.6.0\"}],\"screen\":{\"availHeight\":690,\"availWidth\":1024,\"colorDepth\":32,\"height\":768,\"pixelDepth\":32,\"width\":1024},\"extra\":{\"javascript_ver\":\"1.6\",\"timezone\":-330}}";
deviceContext.buildDeviceSignature(jsonSignature, null, null);
System.out.println("Device Signature: " + deviceContext.getDeviceSignature());
// デバイス ID を設定します。
String idType = "HTTP_COOKIE";
/* evaluateRisk が初めて呼び出される場合、デバイスは RiskFort サーバによって認識されないため、deviceId=null です。
* RiskFort サーバはユーザのマシンの Cookie に deviceId を設定します。これは、その後のトランザクションの間に RiskFort サーバに渡されます。
*/
文字列 deviceId = null;
deviceContext.setDeviceID(idType, deviceId);
/* 各トランザクションでは、deviceId または aggregatorID の両方ではなく、いずれかを設定する必要があります。
deviceContext.setAggregatorID("LcPywTghrtyed6KDuRcMbWiFFTYR2oFThfdDOtBKqKcdEXsH9dFIFfrr/dsfdud");
System.out.println("Aggregator ID: " + deviceContext.getAggregatorID());
*/
// 入力ロケーション関連情報。
LocationContext locationContext = new LocationContext();
InetAddress ipAddress = null;
// ユーザのマシンの IP アドレス。これは一般的に HTTP ヘッダから抽出されます。
try {
ipAddress = InetAddress.getByName("127.0.0.1");
} catch (UnknownHostException e) {
// 適切なアクションを実行します。
}
locationContext.setIpAddress(ipAddress);
System.out.println("Ip address: " + locationContext.getIPAddress());
// 入力トランザクション関連情報。
TransactionContext transactionContext = new TransactionContext();
transactionContext.setAction("action");
transactionContext.setChannel("DEFAULT");
/*各トランザクションに対し、トランザクション コンテキストに拡張可能エレメントを設定するか、または追加の入力を設定する必要があります。
transactionContext.setExtensibleElements("MerchantID=id;MerchantCountry=country;MerchantName=name");
*/
HashMap<String,String> additionalInputs = new HashMap<String,String>();
String extName1 = "MerchantID";
String extValue1 = "id";
String extName2 = "MerchantCountry";
String extValue2 = "country";
String extName3 = "MerchantName";
String extValue3 = "name";
//組織がアカウントを使用するように設定されている場合は、以下の属性を指定する必要があります(それ以外の場合は不要)。
//この場合、userContext 内の USERID 属性はアカウントとして処理されるため、以下の情報が
//このアカウントが属する実際の使用を識別するために必要です。
String extName4 = "ACCOUNTTYPE";
String extValue4 = "accType";
String extName5 = "PARENTUSERID"; //組織がアカウントを使用するように設定されていて、暗黙的なユーザの作成が有効になっている場合。
String extValue5 = "parentid";
if(extName1 != null && extName1 != "" )
additionalInputs.put(extName1, extValue1);
if(extName2 != null && extName2 != "" )
additionalInputs.put(extName2, extValue2);
if(extName3 != null && extName3 != "" )
additionalInputs.put(extName3, extValue3);
if(extName4 != null && extName4 != "" )
additionalInputs.put(extName4, extValue4);
if(extName5 != null && extName5 != "" )
additionalInputs.put(extName5, extValue5);
try {
System.out.println("evaluateRisk called.");
// API を呼び出してトランザクションに関連付けられたリスクを評価します。
riskAssessment = api.evaluateRisk(callerId, deviceContext, locationContext, userContext, transactionContext /*, additionalInputs */);
System.out.println("evaluateRisk succeeded.");
System.out.println("Device Id set on the user's machine: " + riskAssessment.getOutputDeviceId());
} catch (RFSDKException e) {
/* UserRepositoryException オブジェクトに対して以下のメソッドを使用し、エラー コードおよびエラー メッセージを以下のように取得できます。
* 文字列コード = e.getErrorCode();
* 文字列メッセージ = e.getMessage();
*/
System.out.println("Exception in 'evaluateRisk'.");
/*System.out.println("Error code: " + e.getErrorCode());*/
System.out.println("Error message: " + e.getMessage());
/* 以下のエラー コードが API によって返されます。 */
/* ERRCODE_INVALID_PACKET_FROM_SERVER
* 考えられる理由:
* サーバから受信したパケットのタイプが無効です。
* 考えられるアクション:
* トランザクションの失敗を報告して再試行を要請します。
*/
/* ERRCODE_PARSING_DATA
* 考えられる理由:
* サーバから xml を解析する際にエラーが発生しました。
* 考えられるアクション:
* トランザクションの失敗を報告して再試行を要請します。
*/
}
catch (RiskException e) {
/* UserRepositoryException オブジェクトに対して以下のメソッドを使用し、エラー コードおよびエラー メッセージを以下のように取得できます。
* 文字列コード = e.getErrorCode();
* 文字列メッセージ = e.getMessage();
*/
System.out.println("Exception in 'evaluateRisk'.");
/*System.out.println("Error code: " + e.getErrorCode());*/
System.out.println("Error message: " + e.getMessage());
/* 以下のエラー コードが API によって返されます。 */
/* ERRCODE_INVALID_PACKET_FROM_SERVER
* 考えられる理由:
* サーバから受信したパケットのタイプが無効です。
* 考えられるアクション:
* トランザクションの失敗を報告して再試行を要請します。
*/
/* ERRCODE_PARSING_DATA
* 考えられる理由:
* サーバから xml を解析する際にエラーが発生しました。
* 考えられるアクション:
* トランザクションの失敗を報告して再試行を要請します。
*/
}
/*
postEvaluate:
evaluateRisk の出力と、呼び出しアプリケーションによって実行された 2 回目の認証(存在する場合)に基づいて、トランザクションに対する最終的な決定を行います。
また、必要に応じて RiskFort システムの情報を更新します。
public PostEvaluateResponse postEvaluate(java.lang.String callerId,
RiskAssessment riskAssessment,
boolean secondaryAuthenticationStatus,
java.lang.String associationName,
AdditionalInputs additionalInputs)
throws RiskException;
パラメータ:
callerId - アプリケーション自体のトラッキング目的で API を呼び出すアプリケーションによって決定される識別子。
riskAssessment - evaluateRisk からの出力
secondaryAuthenticationStatus - 2 回目の認証の結果。
2 回目の認証が成功した場合は、「true」を渡し、それ以外の場合は「false」を渡します。
evaluateRisk が INCREASEAUTH 以外のアドバイスを戻した場合(2 回目の認証を要求されなかった場合)は「false」を渡します。
associationName - トランザクションを実行したマシンに関連付ける名前としてユーザが選択した値。
ユーザは共有マシンに対して関連付けを選択しないようにする必要があります。その場合は、「null」を渡すことができます。
additionalInputs - 別の操作で必要になる可能性がある追加の入力。 これは今後の使用の為に保持されています。
戻り値:
PostEvaluateResponse - このトランザクションの続行を許可するかどうかを示します。 isAllowAdvised() を使用して確認することができます。トランザクションを許可する必要がある場合は「true」を返し、拒否する必要がある場合は「false」を返します。
スローする値:
RiskException - 何らかの理由でリクエストが失敗した場合。
*/
// evaluateRisk の出力および呼び出しアプリケーションによって実行された 2 回目の認証に基づいて最終的な決定を行うサンプル コード。
// ここで入力として渡された RiskAssessment オブジェクトは evaluateRisk() への呼び出しによって返されたオブジェクトです。
PostEvaluateResponse postEvalResponse = null;
String associationName; // トランザクションが実行されているマシンに関連付けられた名前
boolean secondaryAuthenticationStatus; // 呼び出しアプリケーションによって実行されている可能性のある 2 回目の認証の結果。
// postEvaluate 呼び出しで使用されるコンテキストを構築します。
associationName = "testAssociationName";
secondaryAuthenticationStatus = true;
/* Map */ additionalInputs = new HashMap<String,String>();
//組織がアカウントを使用するように設定されている場合は、以下の属性を指定する必要があります(それ以外の場合は不要)。
//この場合、userContext 内の USERID 属性はアカウントとして処理されるため、以下の情報が
//このアカウントが属する実際の使用を識別するために必要です。 これは、postEvaluate にも指定する必要があります。
/*String */ extName1 = "ACCOUNTTYPE";
/*String */ extValue1 = "accType";
/*String */ extName2 = "PARENTUSERID"; //組織がアカウントを使用するように設定されていて、暗黙的なユーザの作成が有効になっている場合。
/*String */ extValue2 = "parentid";
if(extName1 != null && extName1 != "" )
additionalInputs.put(extName1, extValue1);
if(extName2 != null && extName2 != "" )
additionalInputs.put(extName2, extValue2);
try {
System.out.println("Calling postEvaluate with Secondary Authentication Status = " + secondaryAuthenticationStatus );
System.out.println("Association name passed: " + associationName);
// API を呼び出して evaluateRisk および 2 回目の認証に基づいた最終的な決定を行います。
postEvalResponse = api.postEvaluate(callerId, riskAssessment, secondaryAuthenticationStatus, associationName /*, additionalInputs*/ );
System.out.println("postEvaluate succeeded.");
} catch (RFSDKException e) {
/* UserRepositoryException オブジェクトに対して以下のメソッドを使用し、エラー コードおよびエラー メッセージを以下のように取得できます。
* 文字列コード = e.getErrorCode();
* 文字列メッセージ = e.getMessage();
*/
System.out.println("Exception in 'postEvaluate'.");
/* System.out.println("Error code: " + e.getErrorCode()); */
System.out.println("Error message: " + e.getMessage());
/* 以下のエラー コードが API によって返されます。 */
/* ERRCODE_INVALID_PACKET_FROM_SERVER
* 考えられる理由:
* サーバから受信したパケットのタイプが無効です。
* 考えられるアクション:
* トランザクションの失敗を報告して再試行を要請します。
*/
/* ERRCODE_PARSING_DATA
* 考えられる理由:
* サーバからの xml を解析する際にエラーが発生しました。
* 考えられるアクション:
* トランザクションの失敗を報告して再試行を要請します。
*/
}
catch (RiskException e) {
/* UserRepositoryException オブジェクトに対して以下のメソッドを使用し、エラー コードおよびエラー メッセージを以下のように取得できます。
* 文字列コード = e.getErrorCode();
* 文字列メッセージ = e.getMessage();
*/
System.out.println("Exception in 'postEvaluate'.");
/* System.out.println("Error code: " + e.getErrorCode()); */
System.out.println("Error message: " + e.getMessage());
/* 以下のエラー コードが API によって返されます。 */
/* ERRCODE_INVALID_PACKET_FROM_SERVER
* 考えられる理由:
* サーバから受信したパケットのタイプが無効です。
* 考えられるアクション:
* トランザクションの失敗を報告して再試行を要請します。
*/
/* ERRCODE_PARSING_DATA
* 考えられる理由:
* サーバからの xml を解析する際にエラーが発生しました。
* 考えられるアクション:
* トランザクションの失敗を報告して再試行を要請します。
*/
}
System.out.println("Risk Evaluation done.");
}
}
このテスト プログラムをコンパイルするには、Assess_Risk.java と言う名前のファイルに保存します。 arcot-riskfort-evaluaterisk.jar および関連する JAR ファイルの arcot_core.jar、arcot-riskfort-mfp.jar、bcprov-jdk14-131.jar、commons-lang-2.0.jar、commons-pool-1.4.jar が JAVA コンパイラの CLASSPATH にあることを確認します。 次に、JAVA コンパイラを実行します。
arcot-riskfort-evaluaterisk.jar ファイルは通常、RiskMinder インストール ディレクトリの sdk\java\lib\arcot ディレクトリにあります。 Assess_Risk.java ファイルが \Program Files\Arcot Systems\sdk\java に保存されている場合は、以下のコマンドを使用します。 JAVA ファイルがこのディレクトリにない場合は、CLASSPATH の sdk\java\lib ディレクトリにフル パス名を指定します。
> cd \program files\arcot systems\sdk\java > javac -classpath ".;lib\arcot\arcot-riskfort-evaluaterisk.jar;lib\arcot\arcot_core.jar;lib\arcot\arcot-riskfort-mfp.jar;lib\external\bcprov-jdk14-131.jar;lib\external\commons-lang-2.0.jar;lib\external\commons-pool-1.4.jar;%CLASSPATH%" Assess_Risk.java
これにより、JAVA ファイルと同じディレクトリに出力ファイル Assess_Risk.class が作成されます。
このテスト プログラムをコンパイルするには、Assess_Risk.java と言う名前のファイルに保存します。 arcot-riskfort-evaluaterisk.jar および関連する JAR ファイルの arcot_core.jar、arcot-riskfort-mfp.jar、bcprov-jdk14-131.jar、commons-lang-2.0.jar、commons-pool-1.4.jar が JAVA コンパイラの CLASSPATH にあることを確認します。 次に、JAVA コンパイラを実行します。
arcot-riskfort-evaluaterisk.jar ファイルは通常、RiskMinder インストール ディレクトリの sdk/java/lib/arcot ディレクトリにあります。 Assess_Risk.java ファイルが /opt/arcot/sdk/java に保存されている場合は、以下のコマンドを使用します。 JAVA ファイルがこのディレクトリにない場合は、CLASSPATH の sdk/java/lib ディレクトリにフルパス名を指定します。
> cd /opt/arcot/sdk/java > javac -classpath ".:./lib/arcot/arcot-riskfort-evaluaterisk.jar:./lib/arcot/arcot_core.jar:./lib/arcot/arcot-riskfort-mfp.jar:./lib/external/bcprov-jdk14-131.jar:./lib/external/commons-lang-2.0.jar:./lib/external/commons-pool-1.4.jar:$CLASSPATH" Assess_Risk.java
これにより、JAVA ファイルと同じディレクトリに出力ファイル Assess_Risk.class が作成されます。
テストを実行する前に、RiskMinder サービスをインストールして起動する必要があります。 テストを実行するには、SDK ライブラリがパス内にあり、arcot-riskfort-evaluaterisk.jar が CLASSPATH 内にあることを確認してから、以下のように JAVA コマンドを実行します。
テストを実行するには、以下のコマンドを使用します。
> cd \program files\arcot systems\sdk\java > java -classpath ".;lib\arcot\arcot-riskfort-evaluaterisk.jar;lib\arcot\arcot_core.jar;lib\arcot\arcot-riskfort-mfp.jar;lib\external\bcprov-jdk14-131.jarlib\external\commons-lang-2.0.jarlib\external\commons-pool-1.4.jar;%CLASSPATH%" Assess_Risk
テストを実行する前に、RiskMinder サービスをインストールして起動する必要があります。 テストを実行するには、SDK ライブラリがパス内にあり、arcot-riskfort-evaluaterisk.jar が CLASSPATH 内にあることを確認してから、以下のように JAVA コマンドを実行します。
テストを実行するには、以下のコマンドを使用します。
> cd /opt/arcot/sdk/java > java -classpath ".:./lib/arcot/arcot-riskfort-evaluaterisk.jar:./lib/arcot/arcot_core.jar:./lib/arcot/arcot-riskfort-mfp.jar:./lib/external/bcprov-jdk14-131.jar:./lib/external/commons-lang-2.0.jar:./lib/external/commons-pool-1.4.jar:$CLASSPATH" Assess_Risk
提供されているサンプル コードを実行すると、以下の出力が表示されます。
Initializing RiskFort API using /riskfort.risk-evaluation.properties
RiskFort API initialized.
The following information is used to assess the risk associated with the transaction.
Username: TestUser
Organization Name:DEFAULTORG
Device Signature: {"navigator":{"platform":"Win32","appName":"Netscape","appCodeName":"Mozilla","appVersion":"5.0 (Windows; en-US)","language":"en-US","oscpu":"Windows NT 5.0","vendor":"","vendorSub":"","product":"Gecko","productSub":"20070312","securityPolicy":"","userAgent":"Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.8.0.11) Gecko/20070312 Firefox/1.5.0.11","cookieEnabled":true,"onLine":true},"plugins":[{"name":"Adobe Acrobat Plugin","version":"7.00"},{"name":"Macromedia Director","version":"10.1"},{"name":"Windows Media Player Plug-in Dynamic Link Library","version":""},{"name":"Macromedia Shockwave Flash","version":"9.0"},{"name":"Java Virtual Machine","version":"1.6.0"}],"screen":{"availHeight":690,"availWidth":1024,"colorDepth":32,"height":768,"pixelDepth":32,"width":1024},"extra":{"javascript_ver":"1.6","timezone":-330}}
Ip address: /127.0.0.1
evaluateRisk called.
evaluateRisk succeeded.
Device Id set on the user's machine: qcd+Vq3NC6qAafCDbsFCBrup0y+z+ci8qjV5QmZI9GWuFGbbX9oIgw==
Calling postEvaluate with Secondary Authentication Status = true
Association name passed: testAssociationName
postEvaluate succeeded.
Risk Evaluation done.
|
Copyright © 2014 CA Technologies.
All rights reserved.
|
|