====== Uniform password for new accounts ======
{{tag>uniform password common account create}}
(since IdM version **11.0.0**)
The main goal of a uniform password for new accounts is to ensure that new identities will have the same password in newly created accounts.
**This feature solves this scenario:**
- Let's have the **synchronization of new identities**. This synchronization will create new **identity I**.
- This synchronization is followed by the **synchronization of contracts**, which creates 2 **new contracts C1, C2** for identity **I**.
- **A tree automatic role** will be linked to contract **C1**, which according to the structure will create an **A1 account** on the S1 system.
- **An attribute automatic role** will be linked to contract **C2**, which will create an **A2 account** on the S2 system according to the contract's attribute.
**Without the use of the uniform password feature**, after the completion of the mentioned scenario, ie. After completing the synchronization of contracts (automatic role recalculation), two new accounts **A1** and **A2** are created, each of which will contain a **different password**. The user will receive **two notifications** of the creation of a new account for each account separately.
**If you use the uniform password feature**, two accounts will also be created, but both will have the **same password**. The user will recevie only **one notification** about the creation of an account on systems S1 and S2.
===== How can be this feature enabled? =====
**To ensure the same password** for all new identity accounts created during synchronization, the systems on which we want to have the same password **must be defined in the uniform password agenda**.
**That means:** In the example above, we must ensure that systems **S1** and **S2** will be in the same active group of the uniform password.
This feature is active only during contract sync and for contracts where a identity state is changed:
* **from** state: **Created** or **No contract** or **Left**
* **to** state: **Valid** or **Future contract**.
{{ :devel:documentation:adm:uniformpwd01.png?800 |}}
{{ :devel:documentation:adm:uniformpwd02.png?800 |}}
**This feature can be disabled** by **disabling** the **IdentityInitUniformPasswordProcessor** initialization processor. This processor creates states of uniform password entities. Therefore, if you deactivate this processor, the entire uniform password feature will also be **deactivated**.
===== How to change password also in IdM? =====
For use same uniform password on systems and **in the IdM**, you have to enable this feature by the checkbox **"Change password through IdM"** on the **uniform password detail**.
{{ :devel:documentation:adm:uniformpwd03.png?800 |}}
===== How this feature works? =====
There is life cycle of this feature:
- **Contract synchronization is started** with a new transaction ID.
- After the synchronization of contracts, the recalculation of **HR processes is started**.
- Newly created contracts will cause a change of identity status (for example from **Created** to **Future contract**). This change will be caught in the **IdentityInitUniformPasswordProcessor** processor, which will create a new entity state with the code `IDENTITY_UNIFORM_PASSWORD` (**uniformPasswordManager.createEntityState(identity)**). This status will be followed by the generated uniform password, which will be stored in confidential storage.
- After the recalculation of HR processes is completed, the recalculation of automatic roles will start. Automatic roles will be assigned to contracts and account management will begin, starting the account creation process.
- As part of the account creation, it will be detected that there is an **entity state** for the given identity with the code `IDENTITY_UNIFORM_PASSWORD`. In this case, the account will **not generate a new password, but will use the password from the given entity state**.
- Once the account is created, the `ProvisioningUniformPasswordNotificationProcessor` will ensure that the **system name** is added to the entity state. This system name will then be used in the final **notification**.
- **After the end of the whole transaction** (the end of all connected events), the LRT will be notified, ensuring the synchronization of the end. The LRT begins the **uniform password end process** (**uniformPasswordManager.endUniformPasswordProcess(transactionId)**). Ie. that it sends a **notification** (to the topic `TOPIC_UNIFORM_PASSWORD_SET`) to all identities for which an entity state has been created within the given transaction, about the generation of new accounts on the given systems and a uniform password.
- After all notification is sent will be **all entity states** with code `IDENTITY_UNIFORM_PASSWORD` and created in given transaction **deleted**.
===== Future improvements =====
**Support the use of the same transaction ID in dependent LRTs**. This will allow HR and automatic recalculations to be used as dependent tasks.
===== Limitations =====
**The uniform password feature works only under one transaction ID.** It means you have to use recalculation of HR processes and automatic roles directly on the contract sync (checkboxes). **Using depending tasks is not supported yet.**
===== Main guide =====
* [[..:uniform_password|]]