Write a custom authentication module that extends com.netegrity.webapp.authentication.AuthenticationModule, as follows:
package com.netegrity.webapp.authentication;
/**
* Implement this interface to write a pluggable authentication module for use with the Framework Native auth.
* The implemented class typically goes hand in hand with a login.jsp/html page that collects some information.
* This information is passed along to the AuthenticationModule for processing. Typical information captured can include
* userid and password.
**/
public abstract class AuthenticationModule
{
/**
* The httpSession attribute name where the exception from the authenticate method will be available.
*/
public static final String FWAUTH_EXCEPTION = "IAMFW_LOGIN_EXCEPTION";
public static Vector MANDATORY_USER_ATTRIBS = null;
public static Log _log = null;
static
{
_log = LogFactory.createLog("im.AuthenticationModule");
MANDATORY_USER_ATTRIBS = new Vector();
//mandatory attribs for a user object
MANDATORY_USER_ATTRIBS.add(User.PROPERTY_ENABLED_STATE);
MANDATORY_USER_ATTRIBS.add(User.PROPERTY_FRIENDLY_NAME);
}
public AuthenticationModule()
{
}
/**
* This method will be called first by the FrameworkLoginFilter. With the given set of information
* in the login.jsp/html, the AuthenticationModule should be able to find a User in the given ImsDirectory.
*
* @param request - The request object
* @param response - The response object
* @param env - The environment being accessed.
* @return The user as found in the provided ImsDirectory.
* @throws Exception - This exception will be put in the httpSession
* as an attribute by the name FWAUTH_EXCEPTION
*/
public abstract User disambiguateUser(HttpServletRequest request, HttpServletResponse response, ImsEnvironment env) throws Exception;
/**
* @param request - The request object
* @param response - The response object
* @param env - The environment being accessed.
* @return The user as found in the provided ImsDirectory.
* @throws Exception - This exception will be put in the httpSession
* as an attribute by the name FWAUTH_EXCEPTION
*/
public abstract boolean authenticate(HttpServletRequest request, HttpServletResponse response, ImsEnvironment env, User user) throws FwAuthenticationException;
}
The default authentication module is listed here for reference. You can write your own authentication module using the default as a model. In general, you must be able to find and return a valid user in the directory of the CA IdentityMinder environment being protected using the form and header variables.
Note: A sample authentication module, which you can also use as a model, is available in the following location:
admin_tools/samples/AuthenticationModule
package com.netegrity.webapp.authentication;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.netegrity.llsdk6.imsapi.exception.FwAuthenticationException;
import com.netegrity.llsdk6.imsapi.exception.NoSuchObjectException;
import com.netegrity.llsdk6.imsapi.managedobject.User;
import com.netegrity.llsdk6.imsapi.ImsDirectory;
import com.netegrity.llsdk6.imsapi.ImsEnvironment;
import com.netegrity.sdk.apiutil.SmApiException;
/**
* The default Framework Authentication module. This works in conjunction
* to the default login.jsp page. The Attribute to be used for looking up
* the user is %USER_ID%.
*
*/
public class DefaultAuthenticationModule extends AuthenticationModule {
public static final String FORM_VAR_USERNAME="username";
public static final String FORM_VAR_PASSWORD="password";
public User disambiguateUser(HttpServletRequest request, HttpServletResponse response, ImsEnvironment env) throws Exception
{
String username = request.getParameter(FORM_VAR_USERNAME);
User user = null;
try
{
ImsDirectory dir = env.getImsDirectory();
user = dir.getUserProvider().disambiguateUser(username, MANDATORY_USER_ATTRIBS.elements());
}
catch (NoSuchObjectException nsoe)
{
throw new FwAuthenticationException("Username and password do not match.");
}
return user;
}
public boolean authenticate(HttpServletRequest request, HttpServletResponse response, ImsEnvironment env, User user) throws FwAuthenticationException
{
String password=request.getParameter(FORM_VAR_PASSWORD);
//verify the user against the directory.
boolean authenticated= false;
try
{
authenticated = user.authenticate(password);
}
catch (SmApiException e)
{
_log.logDebug("Exception while authenticating: "+e.getMessage());
_log.logDebug(e);
throw new FwAuthenticationException(e.getMessage());
}
if (!authenticated)
{
throw new FwAuthenticationException("Username and password do not match.");
}
return authenticated;
}
}
Save your compiled Java class file to the iam_im.ear\custom folder.
| Copyright © 2013 CA. All rights reserved. |
|