35 lines
1.6 KiB
Markdown
35 lines
1.6 KiB
Markdown
|
|
# resoudre_politique_mdp
|
||
|
|
|
||
|
|
Rôle **utilitaire** (non déployable) : porte *la* déclaration de la politique de mot de
|
||
|
|
passe et la traduit dans les deux dialectes qui doivent l'appliquer.
|
||
|
|
|
||
|
|
| Dialecte | Consommateur | Sortie |
|
||
|
|
|---|---|---|
|
||
|
|
| `pwdPolicy` (ppolicy) | `serveur_openldap` | `resoudre_politique_mdp_ldap` |
|
||
|
|
| `passwordPolicy` du realm | `serveur_keycloak` | `resoudre_politique_mdp_keycloak` |
|
||
|
|
| anti-force-brute du realm | `serveur_keycloak` | `resoudre_politique_mdp_brute` |
|
||
|
|
|
||
|
|
## Pourquoi
|
||
|
|
|
||
|
|
Les règles n'existaient que côté LDAP. LDAP ne sait que **refuser** — il ne dit jamais à
|
||
|
|
l'écran *pourquoi*. Keycloak, lui, ne validait rien : `passwordPolicy` était vide. Chacun
|
||
|
|
déléguait la vérification à l'autre.
|
||
|
|
|
||
|
|
Mesuré le 2026-08-08 avec un compte sonde, le même mot de passe `abcd` :
|
||
|
|
|
||
|
|
```
|
||
|
|
opération étendue LDAP → Constraint violation (19) — "Password fails quality checking policy"
|
||
|
|
Keycloak reset-password → 204, puis ldapwhoami avec "abcd" : accepté
|
||
|
|
```
|
||
|
|
|
||
|
|
Deux causes empilées : Keycloak écrivait `userPassword` **directement** en tant que rootDN,
|
||
|
|
donc l'overlay `ppolicy` n'interceptait rien ; et le realm n'avait aucune politique propre.
|
||
|
|
La correction tient aux deux bouts — `usePasswordModifyExtendedOp` côté fédération, et la
|
||
|
|
politique projetée ici.
|
||
|
|
|
||
|
|
## Ce que ce rôle ne fait pas
|
||
|
|
|
||
|
|
Il ne compare pas les deux dialectes après coup. Ils ne sont pas équivalents : `pwdCheckQuality`
|
||
|
|
d'OpenLDAP délègue à un module externe, `notUsername`/`notEmail` de Keycloak sont des règles
|
||
|
|
précises. La garantie porte sur la **source**, pas sur une équivalence terme à terme.
|