SampleAMUsernamePasswordValidatorpublic class SampleAMUsernamePasswordValidator extends Object implements PasswordValidationCallback.PasswordValidator
Fields Summary |
---|
private static final String | ORG_NAME | private static com.iplanet.sso.SSOToken | selfToken | private static String | orgName | private static com.iplanet.am.util.Debug | debug |
Methods Summary |
---|
static void | addLoginCallbackMessage(javax.security.auth.callback.Callback[] callbacks, java.lang.String orgName, java.lang.String userName, java.lang.String password)
for (int i = 0; i < callbacks.length; i++) {
if (callbacks[i] instanceof NameCallback) {
// prompt the user for a username
debug.message("Name callback");
NameCallback nc = (NameCallback) callbacks[i];
nc.setName(userName);
} else if (callbacks[i] instanceof PasswordCallback) {
// prompt the user for sensitive information
debug.message("Password callback");
PasswordCallback pc = (PasswordCallback) callbacks[i];
pc.setPassword(password.toCharArray());
}
}
| private com.iplanet.sso.SSOToken | authenticateUser(java.lang.String username, java.lang.String password)
debug.message("Entering SampleAMUsernamePasswordValidator.authenticateUser");
AuthContext ac = null;
SSOToken token = null;
debug.message("Username is "+username);
debug.message("OrgName is "+orgName);
try {
debug.message("Trying to make an AuthContext");
ac = new AuthContext(orgName);
debug.message("Made an AuthContext");
ac.login();
debug.message("Logged in AuthContext");
} catch (LoginException le) {
debug.error( "Failed to create AuthContext", le );
throw new PasswordValidationCallback.PasswordValidationException("Failed to create AuthContext", le);
}
try {
Callback[] callbacks = null;
// Get the information requested by the plug-ins
while (ac.hasMoreRequirements()) {
callbacks = ac.getRequirements();
if (callbacks != null) {
addLoginCallbackMessage(callbacks, orgName, username, password);
ac.submitRequirements(callbacks);
}
}
if (ac.getStatus() == AuthContext.Status.SUCCESS) {
debug.message("Authentication successful");
} else if (ac.getStatus() == AuthContext.Status.FAILED) {
debug.message("Authentication failed");
throw new PasswordValidationCallback.PasswordValidationException("Authentication failed");
} else {
debug.message("Unknown authentication status: " + ac.getStatus());
throw new PasswordValidationCallback.PasswordValidationException("Unknown authentication status: " + ac.getStatus());
}
} catch (Exception e) {
debug.error( "Authentication failed", e );
throw new PasswordValidationCallback.PasswordValidationException("Authentication failed", e);
}
try {
debug.message("Trying to get SSO token");
token = ac.getSSOToken();
debug.message("Got SSO token");
} catch (Exception e) {
debug.error( "getSSOToken failed", e );
throw new PasswordValidationCallback.PasswordValidationException("getSSOToken failed", e);
}
debug.message("Leaving SampleAMUsernamePasswordValidator.authenticateUser");
return token;
| private void | updateUserSubject(com.iplanet.sso.SSOToken token)
Subject subj = SubjectAccessor.getRequesterSubject();
if (subj == null){
subj = new Subject();
SubjectAccessor.setRequesterSubject(subj);
}
debug.message("Add to subject - SSOToken is "+token);
Set set = subj.getPublicCredentials();
set.clear();
set.add(token);
| public boolean | validate(PasswordValidationCallback.Request request)
PasswordValidationCallback.PlainTextPasswordRequest plainTextRequest =
(PasswordValidationCallback.PlainTextPasswordRequest) request;
String username = plainTextRequest.getUsername();
String password = plainTextRequest.getPassword();
SSOToken token = authenticateUser(username, password);
debug.message("Authenticated username/pasword SSOToken is "+token);
updateUserSubject(token);
debug.message("Leaving SampleAMUsernamePasswordValidator.validate");
return true;
|
|