Authenticating a User


Often times you may want to simply test a username/password against LDAP to see if it is valid. This can be done with a shorthand method directly on the LdapManager class:


// With your LdapManager class already instantiated...
if ($ldapManager->authenticate($username, $password)) {
    echo "Success! The password for $username is correct.";
}

This method creates an authentication operation object and executes it against the current connection. You could also do the following:

use LdapTools\Operation\AuthenticationOperation;

$operation = (new AuthenticationOperation())->setUsername($username)->setPassword($password);

// With your LdapManager class already instantiated...
$response = $ldapManager->getConnection()->execute($operation);

if (!$response->isAuthenticated()) {
    echo "Error validating password for '".$operation->getUsername()."': ".$response->getErrorMessage();
}

Valid Username Formats

The authenticate() method username argument can be the same value types as the username you defined in your config. For Active Directory, this means you can authenticate a user using either a UPN, a text SID, a text GUID, a distinguished name, or just a normal username. With OpenLDAP the username must be a full DN. However, you can adjust the bind_format option for the domain configuration to modify this behavior.

Authentication Error Messages

There are many times where you may want to provide a more meaningful response as to why authentication for a user has failed. This information is possible to get by passing additional optional variables to the authenticate() method.


// With your LdapManager class already instantiated...
if (!$ldapManager->authenticate($username, $password, $message, $code)) {
     echo "Error ($code): $message";
}

When using Active Directory, the above can give you very helpful information as to why the user cannot log in. Such as a disabled account, a locked account, or an account whose password needs to change before they can login again. The most common error codes you may see in AD:

Error Number Constant Description
1317 AccountInvalid Account does not exist.
1326 AccountCredentialsInvalid Account password is invalid.
1327 AccountRestrictions Account Restrictions prevent this user from signing in.
1328 AccountRestrictionsTime Time Restriction - The account cannot login at this time.
1329 AccountRestrictionsDevice Device Restriction - The account is not allowed to log on to this computer.
1330 AccountPasswordExpired The password for the account has expired.
1331 AccountDisabled The account is currently disabled.
1384 AccountContextIDS The account is a member of too many groups and cannot be logged on.
1793 AccountExpired The account has expired.
1907 AccountPasswordMustChange The accounts password must change before it can login.
1909 AccountLocked The account is currently locked out.

All constants are located in \LdapTools\Enums\AD\ResponseCode. You should use those constants to compare against the received error number to take a specific action for an event.