== User Management

AppNG offers extensive possibilities for user administration.

=== User Types

In general a distinction is made between **local users, single LDAP users and LDAP groups**.

For local users, you have full control over all the user's details, like if he may or must (not) change his password.

With setting the platform properties 

* `forceChangePassword` to `true`
* `passwordMaxValidity` to a value greater zero (unit: days)

a local user can be forced to change his password after a certain time.

By setting the platform property `inactiveLockPeriod` to a value greater zero (unit: days), users can be locked automatically due to inactivity. 

=== LDAP Connectivity

It's possible to configure LDAP connectivity on a site level.

For details, check out the {manager-guide}#ldap-connectivity[appNG Manager User Guide^].


=== Password Policies

Using the multiline platform property  `configurablePasswordPolicy`, it is possible to exactly define how a valid password must be built upon.

These are available settings to do so:

* `minLowerCase` (default: `1`) +
The minimum number of lowercase letters (a-z).
* `minUppercase` (default: `1`) +
The minimum number of uppercase letters (A-Z).
* `minDigits` (default: `1`) +
The minimum number of digits (0-9).
* `minSpecialChars` (default: `1`) +
The minimum number of special characters (see `allowedSpecialChars`).
* `allowedSpecialChars` (default: `!"#$%&'()*+,-./:;<=>?@[\]^_``{|}~`) +
The allowed special characters,
* `minLength` (default: `8`) +
The minimum length of the password.
* `maxLength` (default: `255`) +
The maximum length of the password. 
* `useHistory` (default: `true`) +
When changing the password, make sure it differs from the current one. 
* `useUsername` (default: `true`) +
Make sure the password does not contain the username, also in reverse order and ignoring case.
* `numCharacterGroups` (default: `4`) +
The minimum number of different character groups that must be used for a password.
* `allowOtherCharacters` (default: `false`) +
Whether or not to allow other characters than letters, digits and the defined special characters.
* `allowWhiteSpace` (default: `false`) +
Whether or not to allow whitespaces. 
* `generateLength` (default: `8`) +
The length of a generated password.
* `generateLowerCase` (default: `3`) +
The number of lowercase letters (a-z) for a generated password.
* `generateUppercase` (default: `3`) +
The number of uppercase letters (A-Z) for a generated password.
* `generateDigits` (default: `1`) +
The number of digits (0-9) for a generated password.
* `generateSpecialChars` (default: `1`) +
The number of special characters for a generated password.

Consequently, the implicit default configuration looks as follows:
[source]
----
minLowerCase = 1
minUppercase = 1
minDigits = 1
minSpecialChars = 1
allowedSpecialChars = !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
minLength = 8
maxLength = 255
useHistory = true
useUsername = true
numCharacterGroups = 4
allowOtherCharacters = false
allowWhiteSpace = false
generateLength = 8
generateLowerCase = 3
generateUppercase = 3
generateDigits = 1
generateSpecialChars = 1
----
