# CLAUDE.md — identity (package Laravel partagé)

> **identity** : package Laravel `Alcyon\Identity` (pas un service déployé) — installé en
> `@dev` dans estair, chaps et messager.
> Gouvernance globale : `../estair-connect-docs/CLAUDE.md`.

## Rôle

Intégration Keycloak : validation JWT RS256 (`VerifyKeycloakToken`), JIT provisioning
(`KeycloakUserProvider`), client Admin REST API (`KeycloakAdminService` : createUser,
sendRequiredActionsEmail, setPassword, rôles…), OTP (SMS/SMTP).

## Règles non-négociables

- 🔒 **FND-007** : le package opère UNIQUEMENT sur la **base de l'hôte** qui l'installe
  (connexion par défaut). Jamais de connexion vers la base d'un autre service.
  Détail : `../estair-connect-docs/registry/FND/FND-007-service-db-isolation-http-only.md`.
- Toute modification de signature publique (`KeycloakAdminInterface`) doit rester
  **rétro-compatible** : le package a 3 hôtes (estair, chaps, messager) — paramètres
  optionnels uniquement, jamais de rupture.
- Ses migrations tournent dans la base de l'hôte : tout fichier de migration référencé
  doit être **committé** (une migration manquante casse la suite de tests des 3 hôtes).

## Repères

- Config : `config/identity.php` (env `KEYCLOAK_*`).
- Keycloak est un serveur EXTERNE hébergé (realm `ceteris`) — accès HTTP uniquement.
