Information about Data Types

20-2 Oracle Fusion Middleware Developers Guide for Oracle Adaptive Access Manager For instructions on customizing, extending, or overriding Oracle Adaptive Access Manager properties, refer to Chapter 7, Customizing Oracle Adaptive Access Manager.

20.2.2 Methods

The methods used in a challenge processor are listed in the sections following.

20.2.3 Example: Email Challenge Processor Implementation

An implementation of the email challenge processor is shown as follows: package oracle.oaam.challenge.processor.challenge; import com.bharosa.common.util.; import com.bharosa.uio.util.UIOUtil; import com.bharosa.uio.util.UIOSessionData; import com.bharosa.common.logger.Logger; import java.io.Serializable; Email Challenge Processor - provides OTP Code generation, delivery and validation public class EmailChallengeProcessor extends com.bharosa.uio.processor.challenge.AbstractOTPChallengeProcessor implements Serializable{ static Logger logger = Logger.getLoggerEmailChallengeProcessor.class; public EmailChallengeProcessor { } Generates OTP Code and stores it in sessionData param sessionData data object available for the session param isRetry boolean value if method was called as a result of a failed answer attempt return protected boolean generateSecretUIOSessionData sessionData, boolean isRety { String otpCode = sessionData.getOTPCode; Table 20–1 Challenge Processor Methods Methods Description protected boolean generateSecretUIOSessionData sessionData, boolean isRetry This method is used to generate code to send to client protected boolean validateAnswerUIOSessionData sessionData, String answer This method is used to validate the user answer. public String checkDeliveryStatusUIOSessionData sessionData, boolean userWaiting, boolean isRetry This method is used if you want to provide a wait until message is sent. public boolean isServiceAvailableUIOSessionData sessionData This method is used to check if external service is available. Developing Custom Challenge Processors 20-3 If no secret code is present in session, generate one. if StringUtil.isEmptyotpCode { if logger.isDebugEnabled logger.debugChallengeEmail generating security code for user: + sessionData.getCustomerId; otpCode = generateCodesessionData; save the code for later reference - validate resend sessionData.setOTPCodeotpCode; } if logger.isDebugEnabled logger.debugOTP code for user + sessionData.getCustomerId + : + otpCode; if StringUtil.isEmptyotpCode { logger.errorEmail Challenge pin generation returned null.; return false; } isRetry flag is turned on if user fails to answer the question if isRetry { return sendCodesessionData; } return true; } Validate user entered answer against value in sessionData param sessionData validate code and return result. param answer answer provided by the user return protected boolean validateAnswerUIOSessionData sessionData, String answer{ need to authenticate OTP Code String otpCode = sessionData.getOTPCode; if otpCode = null otpCode.equalsanswer { Expire OTP Code sessionData.setOTPCodenull; return true; } return false; } Private methods to send secret code to client param sessionData return private boolean sendCodeUIOSessionData sessionData{ String otpCode = sessionData.getOTPCode; try { UIOUtil.getOTPContactInfo fetches the information registered by the user. Refer to ChallengeEmail.requiredInfo in configuration. String toAddr = UIOUtil.getOTPContactInfosessionData, email;