IBM Verify

IBM Verify

Join this online user group to communicate across Security product users and IBM experts by sharing advice and best practices with peers and staying up to date regarding product enhancements.

 View Only
Expand all | Collapse all

How to deal with password expiry in aac authentication mechanism

  • 1.  How to deal with password expiry in aac authentication mechanism

    Posted Thu April 02, 2020 07:10 AM
    Hi,

    I am building a custum authentication mechanism, where the enduser gets mapped to an alias.
    I've followed some articles and came up with the code below, which works fine.

    Now I don't know how to proceed with password expiry.
    How to detect the password is expired.
    How to follow up on expiry, presenting a password change page.

    Any help much appreciated!

    This is my code so far.

    importClass(Packages.com.ibm.security.access.user.UserLookupHelper);
    importClass(Packages.com.ibm.security.access.user.User);
    importClass(Packages.java.util.Properties);
    importClass(Packages.com.tivoli.am.fim.trustserver.sts.utilities.IDMappingExtUtils);

    function trace(msg) {
    //com.tivoli.am.fim.trustserver.sts.utilities.IDMappingExtUtils=ALL
    IDMappingExtUtils.traceString("IdpMap " + msg);
    }

    trace("Started");

    var IDP_LDAP_ATTR = "businessCategory";
    var REQUIRED_LDAP_SUFFIX = "c=nl";

    var prps = new java.util.Properties();
    prps.put("ldap.enable-last-login","true");
    prps.put("ldap.login-failures-persistent","true");

    var username = context.get(Scope.REQUEST, "urn:ibm:security:asf:request:parameter", "username");
    var password = context.get(Scope.REQUEST, "urn:ibm:security:asf:request:parameter", "password");

    if(username == null || password == null) {
    //This is likely the first time through
    //Display the default template page here -
    //to challenge for the username and password
    success.setValue(false);
    } else {
    //Second time around, or parameters provided directly.
    var hlpr = new UserLookupHelper();
    // Init with our ISAM RTE username/password config
    hlpr.init(false, prps);

    // Default Error message to display on failure
    var errorString = "Username or Password not correct.";
    //False unless told otherwise
    success.setValue(false);

    // First, try and get the user
    // If the entry provided was the username, we can use that.
    var user = hlpr.getUser(username);

    if(user != null) {
    //Found a user - try and authenticate
    var authn = user.authenticate(password);
    if(authn) {
    //Authentication has succeeded
    trace("Authentication has succeeded " + username);
    // New Error message to display on failure
    errorString = "Not possible to authenticate.";
    //Try searching the alias account
    var searched = hlpr.search(IDP_LDAP_ATTR,username,2);
    if(searched.length == 1) {
    //Just one result
    trace("Found user " + searched[0] + " from idp " + username + ".");
    if (searched[0].toLowerCase().endsWith(REQUIRED_LDAP_SUFFIX)) {
    user = hlpr.getUserByNativeId(searched[0]);
    trace("ISAM user " + user.getId() + ".");
    //Mark this mechanism as having completed.
    //Set the username attribute in the response token.
    //Add anything else you want to the cred here.
    context.set(Scope.SESSION, "urn:ibm:security:asf:response:token:attributes", "itfim_override_targeturl_attr", "/mobile-demo/diag/");
    context.set(Scope.SESSION, "urn:ibm:security:asf:response:token:attributes", "username", user.getId());
    success.setValue(true);
    } else {
    //Mark this mechanism unsuccessful.
    //The user found has the wrong ldap suffix
    trace("User " + searched[0] + " has the wrong ldap suffix");
    macros.put("@ERROR_MESSAGE@", errorString);
    success.setValue(false);
    }
    } else {
    // Either do some magic, or just return a fail response.
    if (searched.length > 1) {
    // It would seem that the username attribute isn't unique
    trace("Username attribute not unique in ldap.");
    } else {
    // It would seem that the username attribute isn't found
    trace("Username attribute not found in ldap.");
    }
    macros.put("@ERROR_MESSAGE@", errorString);
    success.setValue(false);
    }
    } else {
    //Authentication has failed
    trace("Authentication has failed " + username);
    //Mark this mechanism unsuccessful.
    //This will return the configured default template.
    macros.put("@ERROR_MESSAGE@", errorString);
    success.setValue(false);
    }
    } else {
    trace("Username not found " + username);
    //No user found by either means - throw generic error
    macros.put("@ERROR_MESSAGE@", errorString);
    success.setValue(false);
    }
    }
    trace("Ended");


    ------------------------------
    Paul van den Brink
    ------------------------------


  • 2.  RE: How to deal with password expiry in aac authentication mechanism

    Posted Tue November 10, 2020 07:39 AM
    Hi Paul,

    I'm facing the same issue. 

    what was the workaround?


    Thanks in advance.

    ------------------------------
    Mukesh
    ------------------------------