Skip Headers
Oracle® Fusion Middleware Developer's Guide for Oracle Adaptive Access Manager
Release 11g (11.1.1)

Part Number E15480-02
Go to Documentation Home
Home
Go to Book List
Book List
Go to Table of Contents
Contents
Go to Index
Index
Go to Master Index
Master Index
Go to Feedback page
Contact Us

Go to previous page
Previous
Go to next page
Next
View PDF

3 Integrating Native .NET Applications

This chapter explains the integration of ASP.NET applications with Oracle Adaptive Access Manager using the .NET API provided by Oracle Adaptive Access Manager. It also contains a description of the four sample applications that illustrates the integration of different features with a basic Web application.

This chapter contains the following sections:

3.1 Overview

ASP.NET applications, written in any ASP.NET language, use the OAAM .NET API to access Oracle Adaptive Access Manager. This API communicates with the server using SOAP, as illustrated in Figure 3-1.

Figure 3-1 .NET Application

The .NET Application is shown.

3.2 Installing Oracle Adaptive Access Manager .NET SDK

The Oracle Adaptive Access Manager .NET development kit (SDK) is packaged in the ZIP file, Bharosa_SDK_DotNet2.0.zip. The contents of this ZIP file should be extracted to the virtual directory of the Web application to be integrated with Oracle Adaptive Access Manager, and the Web application project files must be updated with references to the unzipped development kit DLLs.

3.3 Application Configuration

To configure the application, define the BharosaSOAPURL key in the <appSettings> section of the configuration file for the Web application, web.config.

The value of this key should be set to the URL that the application will use to access the Oracle Adaptive Access Manager Server SOAP services. The following section of a web.config file illustrates this setting:

<appSettings>
  <add key="BharosaSOAPURL" value="http://localhost:9090/oaam_server/services"/>
</appSettings>

3.4 Properties

The Oracle Adaptive Access Manager .NET SDK includes properties files that specify values for configuration used by the Oracle Adaptive Access Manager APIs. A developer can modify these properties to specify application-specific values or add new ones.

The Oracle Adaptive Access Manager .NET API uses these properties to read configurable values at runtime, such as the location of images for virtual authentication devices. Properties are read and cached from a list of files at startup and updated whenever one of the properties files is updated.

The sequence in which the properties files are loaded by Oracle Adaptive Access Manager .NET API is as follows:

  1. The lookup.properties file, if present, is loaded first.

  2. If the properties.filelist property is defined in lookup.properties, then all the files listed in that property are added to the queue (in the listed order).

  3. The bharosa_lookup.properties file, if present, is loaded.

  4. If the properties.filelist property is defined in bharosa_lookup.properties, then all the files listed in that property are added to the queue (in the listed order)

  5. All files in the queue are loaded.

  6. When any of the loaded properties files is changed, the properties are reloaded.

The properties files, including lookup.properties, are searched in the following directories in the order stated in Table 3-1; the search for a given file stops when the file is first found or when no file is found.

Table 3-1 Directories Searched for Properties Files

Directory Example

<ApplicationDirectory>/

c:/Inetpub/wwwroot/MyApp/

<CallingAssemblyDirectory>/

c:/Windows/System32/

<CurrentAssemblyDirectory>/

c:/Inetpub/wwwroot/MyApp/bin/

<CurrentAssemblyDirectory>/../

c:/Inetpub/wwwroot/MyApp/

<CurrentDirectory>/

c:/Windows/System32/

<ApplicationDirectory>/bharosa_properties/

c:/Inetpub/wwwroot/MyApp/bharosa_properties/

<CallingAssemblyDirectory>/bharosa_properties/

c:/Windows/System32/bharosa_properties/

<CurrentAssemblyDirectory>/bharosa_properties/

c:/Inetpub/wwwroot/MyApp/bin/bharosa_properties/

<CurrentAssemblyDirectory>/../bharosa_properties/

c:/Inetpub/wwwroot/MyApp/bharosa_properties/

<CurrentDirectory>/bharosa_properties/

c:/Windows/System32/bharosa_properties/


3.5 User-Defined Enumerations

A user-defined enumeration is a collection of items; each item is assigned an integer and may contain several attributes. A user-defined enumeration is specified in a properties file, and its name, the names of its items, and the name of the item attributes must conform to the following rules:

Here is an example of a user-defined enumeration:

#Example of a user-defined enumeration 
auth.status.enum=Enumeration to describe authentication status

#first item and its attributes
auth.status.enum.success=0
auth.status.enum.success.name=Success
auth.status.enum.success.description=Success
auth.status.enum.success.success=true

#second item and its attributes
auth.status.enum.invalid_user=1
auth.status.enum.invalid_user.name=Invalid user 
auth.status.enum.invalid_user.description=Invalid User

#third item and its attributes
auth.status.enum.wrong_password=2
auth.status.enum.wrong_password.name=Wrong password 
auth.status.enum.wrong_password.description=Wrong password

#fourth item and its attributes
auth.status.enum.wrong_pin=3
auth.status.enum.wrong_pin.name=Wrong pin
auth.status.enum.wrong_pin.description=Wrong Pin

#fifth item and its attributes
auth.status.enum.session_expired=4
auth.status.enum.session_expired.name=Session expired 
auth.status.enum.session_expired.description=Session expired

Here is an example of the use of the previous user-defined enumeration in application code:

UserDefEnumFactory factory = UserDefEnumFactory.getInstance();
UserDefEnum statusEnum = factory.getEnum("auth.status.enum");
int statusSuccess       = statusEnum.getElementValue("success");
int statusWrongPassword = statusEnum.getElementValue("wrong_password");

3.6 User Details

Oracle Adaptive Access Manager stores user details in its database and uses this information to perform the following tasks:

The client application is responsible for populating the Oracle Adaptive Access Manager database with user details at runtime.

For example, when a user logs in, the client application should first determine whether the user record exists. If the record is not found, then the application should call the appropriate APIs to create a user record and set the user status.

The following sample illustrates the calls to create a user record:

string loginId = "testuser";  // loginId of the user logging in

// set the proxy to access the SOAP server that communicates with the 
// OAAM SOAP Server 
IBharosaProxy proxy = BharosaClientFactory.getProxyInstance();
 
// find the user record in OAAM
VCryptAuthUser user = proxy.getUserByLoginId(loginId);
 
// if user record does not exist, create one
if(user == null || StringUtil.IsEmpty(user.LoginId))
{
    string customerId  = loginId; 
    string userGroupId = "PremiumCustomer";
    string password    = "_"; // this value is not used for now
 
    user = new VCryptAuthUser(loginId, customerId,
                              userGroupId, password);
    user = proxy.createUser(user);
 
    // set the status of the new user to Invalid; once the user is 
    // authenticated, set the status to PendingActivation; after the
    // user succssfully completes registration, set the status to Valid
    proxy.setUserStatus(user.CustomerId, (int)UserStatus.Invalid);
}
 
// save the user record in the session for later reference
AppSessionData sessionData = AppSessionData.GetInstance(Session);
 
sessionData.CurrentUser = user;

For further details, see the sample applications in Section 3.15, "ASP.NET Sample Applications."

3.7 User Logins and Transactions

Oracle Adaptive Access Manager provides APIs to capture user login information, user login status, and other user session attributes to determine device and location information. Oracle Adaptive Access Manager also provides APIs to collect transaction details.

The following code sample illustrates the use of this API:

// record a user login attempt in OAAM
string   requestId      = sessionData.RequestId;
string   remoteIPAddr   = Request.UserHostAddress;
string   remoteHost     = Request.UserHostName;
bool     isFlashRequest = Request.Params["client"].Equals("vfc");
string   secureCookie   = (Request.Cookies["vsc"] != null)
                             ? Request.Cookies["vsc"].Value : null;
string   digitalCookie  = isFlashRequest
                             ? Request.Params["v"] : null;
object[] browserFpInfo = HttpUtil.GetBrowserFingerPrint();
object[] flashFpInfo   = HttpUtil.GetFlashFingerPrint();
 
int browserFingerPrintType =
               browserFpInfo == null ? 0 : (int) browserFpInfo [0];
string browserFingerPrint =
               browserFpInfo == null ? "" : (string) browserFpInfo [1];
int flashFingerPrintType =
               flashFpInfo == null ? 0 : (int) flashFpInfo[0];
string flashFingerPrint =
               flashFpInfo == null ? "" : (string) flashFpInfo[1];
 
// if user name and password have been validated by now, set the status
// to the appropriate value, such as success, wrong_password, or invalid_user 
int status = statusEnum.getElementValue("success");

// if user name and password have not yet been validated, set the status to 
// pending; after validation is done call updateLog to update status
int status = statusEnum.getElementValue("pending");
 
// Call updateLog to record the user login attempt
CookieSet cs = proxy.updateLog(requestId, remoteIPAddr, remoteHost,
                     secureCookie, digitalCookie, user.CustomerGroupId,
                     user.CustomerId, user.LoginId, false,
                     status, ClientTypeEnum.Normal,
                     "1.0", browserFingerPrintType, browserFingerPrint,
                     flashFingerPrintType, flashFingerPrint);
 
// Update secure cookie in the browser with the new value from OAAM
if (cs != null)
{
    HttpUtil.UpdateSecureCookie(Response, cs);
}

3.8 Rules Engine

The Rules Engine is the component of Oracle Adaptive Access Manager used to enforce policies. Based on a calling context, the Rules Engine evaluates policies and provides the results of those evaluations. Policies are configured by the administrator; for details on policy configuration, see "Creating Policies" in the Oracle Fusion Middleware Administrator's Guide for Oracle Adaptive Access Manager.

The following code sample illustrates the use of APIs to invoke the Rules Engine after a user has been authorized and to process the rule evaluation result:

AppSessionData  sessionData = AppSessionData.GetInstance(Session);
IBharosaProxy      proxy    = BharosaClientFactory.getProxyInstance();
UserDefEnumFactory factory  = UserDefEnumFactory.getInstance();
UserDefEnum profileTypeEnum = factory.getEnum("profile.type.enum");
 
string             requestId    = sessionData.RequestId;
BharosaStringList  profileTypes = new BharosaStringList();
BharosaStringTable contextList  = new BharosaStringTable();
 
int postAuthType = profileTypeEnum.getElementValue("postauth");
 
profileTypes.Add(postAuthType.ToString());
 
// Run postauth rules
VCryptRulesResult res = proxy.processRules(requestId,
                                           profileTypes, contextList);
 
// process the rule result
if (StringUtil.EqualsIgnoreCase(res.Result, "Allow"))
{
// Allow the user login
}
else if (StringUtil.EqualsIgnoreCase(res.Result, "Block"))
{
// Block the user login
}
else if (res.Result.StartsWith("Challenge"))
{
// Take the user through challenge question flow
}
else if (res.Result.StartsWith("RegisterUser"))
{
// Take the user through registration flow
}

3.8.1 Device ID

In addition to delivering the rules result, the Rules Engine can return a device ID, an internal Oracle Adaptive Access Manager identifier for the device used for this login session.

The following sample code illustrates how to get the device ID:

VCryptRulesResult rulesResult = proxy.processRules ...);
 
If (!rulesResult.Response.IsSuccess) {
 BharosaTrace.Error("Error running rules " + rulesResult.Response.ErrorMessage);
}
Long deviceId = rulesResult.DeviceId;

Important:

The code shown assumes that:
  • You are using Oracle Adaptive Access Manager 10.1.4.5 or above

  • You have set the property bharosa.tracker.send.deviceId to true in Oracle Adaptive Access Manager:

    bharosa.tracker.send.deviceId=true
    

3.8.2 Creating and Updating Bulk Transactions

The IBharosaProxy.createTransactions() method can be used to create bulk transactions, as illustrated in the following call:

VCrypResponse[] createTransactions(TransactionCreateRequestData[] transactionCreateRequestData);

The IBharosaProxy.updateTransactions() method can be used to update bulk transactions, as illustrated in the following call:

VCrypResponse[] updateTransactions(TransactionUpdateRequestData[] transactionUpdateRequestData);

3.9 Validating a User with Challenge Questions

Oracle Adaptive Access Manager can challenge a user with pre-registered questions and match user answers with pre-registered answers during high-risk or suspicious scenarios.

Typically, a user is asked to choose questions from a given set and provide answers for them, all of which are then registered. When the user is challenged with one of these questions, he must supply the correct answer, that is, one that matches the answer he registered.

The following sample code illustrates the calls to register questions and answers and challenge the user:

//  Retrieve a question-pickset, containing groups of questions from
//  which the user would pick one question from each group for
//  registration
VCryptQuestionList[] groups = proxy.getSignOnQuestions(
                                                    user.CustomerId);
 
// See the sample application at the end of this chapter
// for details on displaying the questions in the UI and processing the user input
// Here, we assume that the q's and a's are in the question object
 
// Register the questions and answers with OAAM
VCryptResponse response = proxy.addQuestions(
                                         user.CustomerId, questions);
 
// Retrive the question to challenge the user
VCryptQuestion secretQuestion = proxy.getSecretQuestion(
                                                     user.CustomerId);

// Create QuestionPad authenticator to display the question text.
// See the sample application at the end of this chapter for details; 
// Here, we assume that the user entered an answer stored in the string answer
 
// Validate the user entered answer
VCryptAuthResult res = proxy.authenticateQuestion(customerId, answer);
 
bool isValid = (res != null && res.ResultCode == 0);

For further details, see the sample applications in Section 3.15, "ASP.NET Sample Applications."

3.10 Resetting Challenge Failure Counters

Oracle Adaptive Access Manager records the number of wrong answers to the questions posed to the user in the failure counters. Failure counters are used to enforce a lock. The API includes a method, resetChallengeFailureCounters(), to reset the failure counters for a given user or user and question combination.

If a Question ID is specified (i.e. questionId != BharosaGlobals.LongNull), in the call, only the failure counters associated with that question are reset; if no Question ID is specified, the failure counters for all registered questions of the user are reset.

The following sample code illustrates a call to reset failure counters:

VCryptResponse resetChallengeFailureCounters(String requestId, 
                            String customerId, long questionId);

3.11 Virtual Authentication Devices

This section describes the creation and use of virtual authentication devices in ASP.NET applications in the following subsections:

3.11.1 Creating a Virtual Authentication Device

To create a virtual authentication device, use the method, BharosaClient.getAuthentiPad(), as illustrated in the following sample code:

IBharosaClient client = BharosaClientFactory.getClientInstance();
 
String padName = "passwordPad";
 
if (! IsPostBack)
{
    AuthentiPadType padType     = AuthentiPadType.TYPE_ALPHANUMERICPAD;
    String          bgFile      = proxy.getImage(user.CustomerId);
    String          captionText = proxy.getCaption(user.CustomerId);
    String          frameFile   = BharosaConfig.get(
"bharosa.authentipad.alphanumeric.frame.file",
"alphanumpad_bg/kp_v2_frame_nologo.png");
 
    AuthentiPad authPad = client.getAuthentiPad(padType, padName,
                                                frameFile, bgFile,
                                                captionText, false,
                                                true, true);
 
    // save the authenticator object in sessData: it will be needed
    // in GetImage.aspx.cs to generate the authenticator image, and
    // while decoding the user input
    sessionData[padName] = authPad;
}

3.11.2 Embedding a Virtual Authentication Device in a Web Page

To display a virtual authentication device properly, such as the one created in the previous section, both the .ASPX file and the code-behind file need to be updated.

To update these files, proceed as follows:

  1. Include the JavaScript bharosa_web/js/bharosa_pad.js in the ASPX file.

  2. Create a label in the ASPX file where the virtual authentication device is to be displayed:

    <asp:Label ID="authenticator" runat="server"></asp:Label>
    
  3. Generate the HTML in the code-behind file from the virtual authentication device object and assign it to the label:

    this.authenticator.Text = client.getAuthentiPadHTML(authPad,false, false);
    

3.11.3 Validating User Input with a Virtual Authentication Device

The input that a user supplies to a virtual authentication device is posted to the application in the HTTP parameter named padName + "DataField". This input should be decoded using the virtual authentication device as illustrated in the following sample code:

if (IsPostBack)
{
    AuthentiPad authPad       = sessionData[padName];
    String      encodedPasswd = Request.Params[padName + "DataField"];
    String      passwd        = authPad.decodeInput(encodedPasswd);
 
    // continue to validate the password
}

3.12 Specifying Credentials to the Oracle Adaptive Access Manager SOAP Server

The credentials to access the Oracle Adaptive Access Manager SOAP Server can be specified in one of the following ways:

3.13 Encrypting Property Values

A property value specified in a properties file can be encrypted using the command-line utility BharosaUtils.exe included in the Oracle Adaptive Access Manager .NET SDK.

An encryption key (arbitrarily selected by the user) is required to encrypt and decrypt values. This key is available to Oracle Adaptive Access Manager .NET API through the property bharosa.cipher.client.key, which must be set in one of the application properties files.

BharosaUtil.exe prompts the user to enter the encryption key and a value, and the encrypted value is output to the console. The following run of the utility illustrates how to encrypt a string:

C:\> BharosaUtil.exe -enc
Enter key (min 14 characters len): <your key>
Enter key again: <your key>
Enter text to be encrypted: <string to encryp>
Enter text to be encrypted again: <string to encryp>
vCCKC19d14a39hQSKSirXSiWfgbaVG5SKIg==

3.14 Tracing Messages

The Oracle Adaptive Access Manager .NET API allows to print trace messages of various levels using diagnostics switches in web.config. The trace messages can be saved to a file by configuring the appropriate listeners.

The following web.config file sample shows the configuration of switches and a listener that writes trace messages to a file:

<system.diagnostics>
  <switches>
    <add name="debug" value="0"/>
    <add name="info" value="0"/>
    <add name="soap" value="0"/>
    <add name="perf" value="0"/>
    <add name="warning" value="1"/>
    <add name="error" value="1"/>
    <add name="traceTimestamp" value="1"/>
    <add name="traceThreadId" value="1"/>
  </switches>
  <trace autoflush="true" indentsize="2">
    <listeners>
      <add name="BharosaTraceListener"
             type="System.Diagnostics.TextWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"
             initializeData="BharosaTrace.log"/>
    </listeners>
  </trace>
</system.diagnostics>

3.15 ASP.NET Sample Applications

The SDK includes ASP.NET applications that illustrate the integration of several Oracle Adaptive Access Manager features with a simple ASP.NET Web application.

The names and brief description of these applications is shown in Table 3-2.

Table 3-2 ASP.NET Applications Samples

Application name Description

SampleWebApp

Plain ASP.NET application with no Oracle Adaptive Access Manager integration. It is the application to be integrated and provided so that the developer can identify the incremental changes to integrate it with various Oracle Adaptive Access Manager features such as the virtual authentication devices and KBA.

SampleWebAppWithTracker

This application illustrates the integration of the Oracle Adaptive Access Manager Risk Engine with SampleWebApp.

SampleWebAppWithAuthTracker

This application illustrates the integration of the Oracle Adaptive Access Manager Risk Engine and virtual authentication device with SampleWebApp.

SampleWebAppWithKBATracker

This application illustrates the integration of the Oracle Adaptive Access Manager Risk Engine and KBA with SampleWebApp.


The source code for each of these applications is packaged in a separate directory, and the Visual Studio Solution files for each of them are located in the root directory. The solutions file SampleWebApps can be loaded to view all applications together in a development environment.

Note:

The three sample integrations require that the archive Bharosa_SDK_DotNet2.0.zip be extracted to the root directory of the corresponding Web application sample.

When setting up an environment to run the sample applications, make sure that:

3.15.1 SampleWebApp

This application contains the following pages:

  • LoginPage.aspx

    • Collects the user name and password using a simple HTML form.

    • Validates the user login information.

    • Depending upon the result of the validation, redirects the user to either Success.aspx or to LoginPage.aspx.

  • Success.aspx

    • Displays the message "Successfully logged in" and allows the user to log out.

  • LogoutPage.aspx

    • Logs out the session and redirects the user to LoginPage.aspx.

3.15.2 SampleWebAppWithTracker

This application integrates SampleWebApp with Oracle Adaptive Access Manager Risk Engine and contains the following pages:

  • LoginPage.aspx

    • Collects the user name and password using a simple HTML form.

    • Saves the login and password in the session.

    • Redirects the user to LoginJumpPage.aspx to collect the flash fingerprint of the user device.

  • LoginJumpPage.aspx

    • Loads the user from Oracle Adaptive Access Manager by calling AppUtil.InitUser. If the user record is not found, it creates a new user record.

    • Returns the HTML to load the flash object bharosa_web/flash/bharosa.swf in the browser. The flash object calls CookieManager.aspx (included in the SDK package) with the flash fingerprint details. CookieManager.aspx records the fingerprint in Oracle Adaptive Access Manager and sets a flash cookie on the user's device.

    • After getting the flash cookie from Oracle Adaptive Access Manager, it redirects the user to LoginHandlerPage.aspx.

  • LoginHandlerPage.aspx

    • Records the user login attempt with Oracle Adaptive Access Manager by calling AppUtil.InitTracker.

    • Validates the user login information.

    • Updates Oracle Adaptive Access Manager with the password validation status (such as success, wrong user, wrong password, or disabled user) by calling AppUtil.UpdateAuthStatus.

    • If password validation succeeds, it runs the post-authentication rules by calling AppUtil.RunPostAuthRules.

    • If the post-authentication rules return block, it updates Oracle Adaptive Access Manager and blocks the user login.

    • Depending on the validation and the rules results, it redirects the user to either Success.aspx or to LoginPage.aspx.

  • Success.aspx

    • Displays the message "Successfully logged in" and allows the user to log out.

  • LogoutPage.aspx

    • Logs out the session and redirects the user to LoginPage.aspx.

3.15.3 SampleWebAppWithAuthTracker

This application integrates SampleWebApp with the Oracle Adaptive Access Manager Risk Engine and a virtual authentication device, and it contains the following pages:

  • LoginPage.aspx

    • Collects the user name and password using a simple HTML form.

    • Saves the login and password in the session.

    • Redirects the user to LoginJumpPage.aspx to collect the flash fingerprint of the user device.

  • LoginJumpPage.aspx

    • Loads the user from Oracle Adaptive Access Manager by calling AppUtil.InitUser. If the user record is not found, it creates a new user record.

    • Returns the HTML to load the flash object bharosa_web/flash/bharosa.swf in the browser. The flash object calls CookieManager.aspx (included in the SDK package) with the flash fingerprint details. CookieManager.aspx records the fingerprint in Oracle Adaptive Access Manager and sets a flash cookie on the user's device.

    • After getting the flash cookie from Oracle Adaptive Access Manager, it redirects the user to LoginHandlerPage.aspx.

  • LoginHandlerPage.aspx

    • Records the user login attempt with Oracle Adaptive Access Manager by calling AppUtil.InitTracker.

    • Redirects the user to PasswordPage.aspx to collect the user password using a virtual authentication device.

  • PasswordPage.aspx

    On Load:

    1. Sets the session authentication status to "Pending".

    2. Runs pre-authentication rules by calling AppUtil.RunPreAuthRules.

    3. If the pre-authentication rules return block, it updates Oracle Adaptive Access Manager and blocks the user login.

    4. If the pre-authentication rules return allow, it runs another set of rules to determine the virtual authentication device to use for this user, by calling AppUtil.RunAuthentiPadRules.

    5. Creates the appropriate virtual authentication device by calling AppUtil.CreateAuthentiPad and renders the virtual authentication device into HTML by using AppUtil.getAuthentiPadHTML. The virtual authentication device HTML would fetch the virtual authentication device image by calling GetImage.aspx.

    6. Stores the virtual authentication device in the session for later use during image generation and password decoding.

    On PostBack

    1. Decodes the user password using the stored virtual authentication device.

    2. Validates the user login and password information.

    3. Updates Oracle Adaptive Access Manager with the password validation status (such as success, wrong user, wrong password, or disabled user) by calling AppUtil.UpdateAuthStatus.

    4. If the password validation succeeds, it runs post-authentication rules by calling AppUtil.RunPostAuthRules.

    5. If the post-authentication rules return block, it updates Oracle Adaptive Access Manager and blocks the user login.

    6. Depending on the validation and the rules results, it redirects the user to either Success.aspx or to LoginPage.aspx.

  • Success.aspx

    • Displays the message "Successfully logged in" and allows the user to log out.

  • LogoutPage.aspx

    • Logs out the session and redirects the user to LoginPage.aspx.

3.15.4 SampleWebAppWithKBATracker

This application illustrates the integration of SampleWebApp with the Oracle Adaptive Access Manager Risk Engine and KBA, and it contains the following pages:

  • LoginPage.aspx

    • Collects the user name and password using a simple HTML form.

    • Saves the login and password in the session.

    • Redirects the user to LoginJumpPage.aspx to collect the flash fingerprint of the user device.

  • LoginJumpPage.aspx

    • Loads the user from Oracle Adaptive Access Manager by calling AppUtil.InitUser. If the user record is not found, it creates a new user record.

    • Returns the HTML to load the flash object bharosa_web/flash/bharosa.swf in the browser. The flash object calls CookieManager.aspx (included in the SDK package) with the flash fingerprint details. CookieManager.aspx records the fingerprint in Oracle Adaptive Access Manager and sets a flash cookie on the user's device.

    • After getting the flash cookie from Oracle Adaptive Access Manager, it redirects the user to LoginHandlerPage.aspx.

  • LoginHandlerPage.aspx

    • Records the user login attempt with Oracle Adaptive Access Manager by calling AppUtil.InitTracker.

    • Redirects the user to PasswordPage.aspx to collect the user password using a virtual authentication device.

  • PasswordPage.aspx

    On Load:

    1. Sets the session authentication status to "Pending".

    2. Runs pre-authentication rules by calling AppUtil.RunPreAuthRules.

    3. If the pre-authentication rules return block, it updates Oracle Adaptive Access Manager and blocks the user login.

    4. If the pre-authentication rules return allow, it runs another set of rules to determine the virtual authentication device to use for this user, by calling AppUtil.RunAuthentiPadRules.

    5. Creates the appropriate virtual authentication device by calling AppUtil.CreateAuthentiPad and renders the virtual authentication device into HTML by using AppUtil.getAuthentiPadHTML. The virtual authentication device HTML would fetch the virtual authentication device image by calling GetImage.aspx.

    6. Stores the virtual authentication device in the session for later use during image generation and password decoding.

    On PostBack:

    1. Decodes the user password using the stored virtual authentication device.

    2. Validates the user login and password information.

    3. Updates Oracle Adaptive Access Manager with the password validation status (such as success, wrong user, wrong password, or disabled user) by calling AppUtil.UpdateAuthStatus.

    4. If the password validation fails, it redirects the user to LoginPage.aspx.

    5. If password validation succeeds, it runs post-authentication rules by calling AppUtil.RunPostAuthRules.

    6. The user is directed through different flows, as shown in the table, depending don the action from post-authenticator rules result:

      Post-Authentication Action Target URL
      Block LoginPage.aspx
      Allow Success.aspx
      ChallengeUser ChallengeUser.aspx
      RegisterQuestions RegisterQuestionsPage.aspx
      RegisterUser PersonalizationPage.aspx
      RegisterUserOptional PersonalizationPage.aspx

  • PersonalizationPage.aspx

    • Introduces the user to device personalization by explaining the steps to create a new user security profile.

    • If the post authentication rule returns RegistrationOptional, the user is allowed to skip the registration process by clicking Skip and to proceed to the Success.aspx page directly.

    • If registration is not optional, the user must register by clicking Continue to proceed to RegisterImagePhrase.aspx.

  • RegisterImagePhrase.aspx

    • Allows the user to customize the randomly generated background image, a caption, and the type of security device to be used during authentication.

    • Assigns a new background image and caption by calling AppUtil.AssignNewImageAndCaption.

    • Assigns the type of security device by calling AppUtil.SetAuthMode.

  • RegisterQuestionsPage.aspx

    • Displays a set of questions by calling proxy.getSignOnQuestions.

    • Registers the selected questions and answers the user enters.

  • ChallengeUser.aspx

    • Challenges the user by displaying QuestionPad with one of the registered questions.

    • The answer is validated by calling proxy.authenticateQuestion and the result is updated by calling AppUtil.UpdateAuthStatus.

    • If the answer is does not match the registered answer, it calls AppUtil.RunChallengeUserRules and, based on its result, it allows the user to reenter the answer or redirects the user to the block page after updating the block status. The number of attempts that a user gets to answer a question correctly is set by the security administrator.

    • If the answer matches the registered answer, it redirects the user to Success.aspx.

  • Success.aspx

    • Displays the message "Successfully logged in" and allows the user to log out.

  • LogoutPage.aspx

    • Logs out the session and redirects the user to LoginPage.aspx.