Module Identity
Module d'authentification et d'autorisation - sessions, 2FA, groupes, roles, authentification sociale
Module Identity
Le module Identity est le module central de Place API. Il gere l'ensemble du cycle de vie de l'identite utilisateur : inscription, connexion, sessions, authentification a deux facteurs, et administration des comptes.
Features
Auth (Authentification)
| Feature | Commande/Query | Description |
|---|---|---|
| Login | LoginCommand | Connexion par email/mot de passe avec verification 2FA, lockout, expiration du mot de passe |
| Register | RegisterCommand | Inscription avec email, mot de passe et confirmation |
| Logout | LogoutCommand | Deconnexion (revocation de la session courante) |
| RefreshToken | RefreshTokenCommand | Rotation du refresh token avec detection de replay |
| ForgotPassword | ForgotPasswordCommand | Envoi d'un OTP pour reinitialiser le mot de passe |
| ResetPassword | ResetPasswordCommand | Reinitialisation du mot de passe via token |
| ConfirmEmail | ConfirmEmailCommand | Confirmation de l'adresse email via OTP |
| ResendConfirmation | ResendConfirmationCommand | Renvoi du lien de confirmation d'email |
| VerifyOtp | VerifyOtpCommand | Verification d'un code OTP |
| ResendOtp | ResendOtpCommand | Renvoi d'un code OTP |
| ChangePassword | ChangePasswordCommand | Changement de mot de passe (avec verification de l'ancien) |
| SocialLogin | SocialLoginCommand | Connexion via Google, Facebook ou Apple |
| GetLinkedAccounts | GetLinkedAccountsQuery | Liste des comptes sociaux lies |
| LinkAccount | LinkAccountCommand | Lier un compte social |
| UnlinkAccount | UnlinkAccountCommand | Delier un compte social |
| Jwks | Endpoint direct | Exposition des cles publiques JWT (JWKS) |
Auth - Sessions
| Feature | Commande/Query | Description |
|---|---|---|
| GetMySessions | GetMySessionsQuery | Liste des sessions actives de l'utilisateur courant |
| RevokeSession | RevokeSessionCommand | Revoquer une session specifique |
| RevokeAllOtherSessions | RevokeAllOtherSessionsCommand | Revoquer toutes les sessions sauf la courante |
Auth - Two Factor (2FA / TOTP)
| Feature | Commande/Query | Description |
|---|---|---|
| TotpSetup | TotpSetupCommand | Initier la configuration TOTP (genere sharedKey + authenticatorUri) |
| TotpVerify | TotpVerifyCommand | Verifier le code TOTP pour activer la 2FA |
| TotpDisable | TotpDisableCommand | Desactiver la 2FA |
| Login2Fa | Login2FaCommand | Completer la connexion avec le code 2FA |
| RegenerateRecoveryCodes | RegenerateRecoveryCodesCommand | Regenerer les codes de recuperation |
Auth - Securite et Push
| Feature | Commande/Query | Description |
|---|---|---|
| GetSecuritySettings | GetSecuritySettingsQuery | Obtenir les parametres de securite |
| UpdateSecuritySettings | UpdateSecuritySettingsCommand | Mettre a jour les parametres de securite |
| RegisterPushToken | RegisterPushTokenCommand | Enregistrer un token de notification push |
| UnregisterPushToken | UnregisterPushTokenCommand | Supprimer un token de notification push |
Admin
| Feature | Commande/Query | Description |
|---|---|---|
| ActivateUser | ActivateUserCommand | Activer un compte utilisateur (permission requise) |
| DeactivateUser | DeactivateUserCommand | Desactiver un compte utilisateur |
| AdminGetUserSessions | AdminGetUserSessionsQuery | Lister les sessions d'un utilisateur (admin) |
| AdminRevokeSession | AdminRevokeSessionCommand | Revoquer une session specifique (admin) |
| AdminRevokeAllUserSessions | AdminRevokeAllUserSessionsCommand | Revoquer toutes les sessions d'un utilisateur (admin) |
Entites
User
Herite de IdentityUser<Guid> (ASP.NET Identity). Implemente IVersion et IHasDomainEvents.
| Propriete | Type | Description |
|---|---|---|
Id | Guid | Identifiant unique (herite) |
UserName | string | Nom d'utilisateur (herite) |
Email | string | Adresse email (herite) |
EmailConfirmed | bool | Email confirme (herite) |
FirstName | string? | Prenom |
LastName | string? | Nom de famille |
PassPortNumber | string? | Numero de passeport |
IsActive | bool | Compte actif (defaut: true) |
ImageUrl | string? | URL de l'avatar |
LastPasswordChangeDate | DateTime? | Date du dernier changement de mot de passe |
CreatedAt | DateTime | Date de creation |
LastLoginAt | DateTime? | Date de derniere connexion |
Version | long | Version pour le controle de concurrence |
Methodes de domaine : Register(), RecordLogin(), RecordPasswordChange(), Activate(), Deactivate(), FillSocialProfile().
UserSession
Represente une session active avec gestion de la rotation de tokens.
| Propriete | Type | Description |
|---|---|---|
Id | SessionId | Identifiant de session |
UserId | UserId | Identifiant de l'utilisateur |
RefreshTokenHash | HashedToken | Hash HMAC-SHA256 du refresh token courant |
PreviousRefreshTokenHash | HashedToken? | Hash du token precedent (pour detection de replay) |
TokenFamilyId | TokenFamilyId | Famille de tokens (pour revocation en cascade) |
IpAddress | string? | Adresse IP a la creation |
UserAgent | string? | User-Agent a la creation |
DeviceId | string? | Identifiant de l'appareil |
DeviceType | DeviceType? | Type d'appareil (Mobile, Desktop, Tablet, Bot) |
Browser | string? | Navigateur detecte |
OperatingSystem | string? | Systeme d'exploitation detecte |
CreatedAt | DateTime | Date de creation |
LastActivityAt | DateTime | Derniere activite (rotation de token) |
ExpiresAt | DateTime | Date d'expiration |
RevokedAt | DateTime? | Date de revocation |
RevocationReason | RevocationReason? | Raison de la revocation |
Role
Herite de IdentityRole<Guid>.
| Propriete | Type | Description |
|---|---|---|
Description | string? | Description du role |
Version | long | Version |
OtpRecord
Code OTP a usage unique pour les verifications.
| Propriete | Type | Description |
|---|---|---|
Id | Guid | Identifiant |
UserId | Guid | Utilisateur cible |
CodeHash | string | Hash du code OTP |
TokenFingerprint | string? | Empreinte du token associe |
Purpose | string | Objectif (email_confirm, password_reset, etc.) |
ExpiresAt | DateTime | Date d'expiration |
Attempts | int | Nombre de tentatives |
IsUsed | bool | Code deja utilise |
TwoFactorChallenge
Challenge temporaire pour l'authentification 2FA.
| Propriete | Type | Description |
|---|---|---|
Id | Guid | Identifiant |
UserId | Guid | Utilisateur |
TokenFingerprint | string | Empreinte du token |
TokenHash | string | Hash du token de challenge |
ExpiresAt | DateTime | Expiration |
Attempts | int | Tentatives |
IsConsumed | bool | Challenge consomme |
Group, GroupRole, UserGroup
Systeme de groupes pour l'attribution de roles.
- Group :
Id,Name,Description,CreatedAt - GroupRole : association Group-Role (
GroupId,RoleId) - UserGroup : association User-Group (
UserId,GroupId,JoinedAt)
PasswordHistory
Historique des mots de passe pour empecher la reutilisation.
| Propriete | Type | Description |
|---|---|---|
Id | Guid | Identifiant |
UserId | Guid | Utilisateur |
PasswordHash | string | Hash du mot de passe |
CreatedAt | DateTime | Date d'enregistrement |
PushToken
Token de notification push par appareil.
| Propriete | Type | Description |
|---|---|---|
Id | Guid | Identifiant |
UserId | Guid | Utilisateur |
Token | string | Token push |
Platform | string | Plateforme (iOS, Android) |
DeviceId | string? | Identifiant de l'appareil |
IdempotencyRecord
Enregistrement d'idempotence pour eviter le traitement en double des requetes.
| Propriete | Type | Description |
|---|---|---|
Key | string | Cle d'idempotence |
RequestIdentity | string | Identite de la requete |
RequestBodyHash | string | Hash du corps de la requete |
StatusCode | int | Code de reponse HTTP |
ResponseBody | string | Corps de la reponse mise en cache |
ExpiresAt | DateTime | Expiration de l'enregistrement |
Autres entites ASP.NET Identity
- UserClaim (
IdentityUserClaim<Guid>) : claims utilisateur - RoleClaim (
IdentityRoleClaim<Guid>) : claims de role - UserLogin (
IdentityUserLogin<Guid>) : logins externes avecProviderEmailetLinkedAt - UserRole (
IdentityUserRole<Guid>) : association utilisateur-role - UserSecuritySettings : parametres de securite utilisateur
ValueObjects
Definis dans Identity.ValueObjects.AuthValueObjects :
| Type | Description |
|---|---|
UserId | Wrapper fort autour de Guid pour l'identifiant utilisateur |
SessionId | Wrapper fort pour l'identifiant de session |
TokenFamilyId | Identifiant de famille de tokens (rotation et replay) |
HashedToken | Token hashe avec HMAC-SHA256 + pepper, expose Hash et Fingerprint |
OtpCode | Code OTP avec validation de longueur et format numerique |
DeviceInfo | Informations sur l'appareil (IP, UserAgent, DeviceId, DeviceType, Browser, OS) |
IpAddressValue | Adresse IP validee avec methode MaskForUser() pour le masquage |
Email | Email normalise et valide |
DeviceType | Enum : Unknown, Mobile, Desktop, Tablet, Bot |
RevocationReason | Enum : MaxSessionsExceeded, TokenRotation, ReplayDetected, UserLogout, etc. |
Services
IAuthTokenResponseBuilder
Construit la reponse complete d'authentification (AuthTokensResponse) incluant access token, refresh token et informations utilisateur.
ITokenService
GenerateAccessToken(IEnumerable<Claim> claims): genere un JWT signeGenerateRefreshToken(): genere un token de rafraichissement aleatoire
ISessionReader / ISessionWriter / ISessionCleanup
Gestion complete des sessions :
- Recherche par ID, par hash de refresh token, par hash de token precedent
- Creation de session, rotation de token, revocation
- Nettoyage des sessions expirees
IUserRegistrationService
CreateUserWithPasswordAsync(UserProfileData, string password): creation par email/mot de passeCreateUserWithExternalProviderAsync(UserProfileData): creation via provider social- Retourne un
UserCreationResult(Success, DuplicateEmail, WeakPassword, CreationFailed)
IOtpService
GenerateOtpAsync(Guid userId, string purpose): genere un code OTPValidateOtpAsync(Guid userId, string code, string purpose): valide un code OTP
ITwoFactorService / ITwoFactorChallengeService
IsTwoFactorEnabledAsync(): verifie si 2FA est activeValidateTwoFactorAsync(): valide un code TOTPCreateChallengeAsync(): cree un challenge 2FA temporaireValidateAndConsumeAsync(): valide et consomme un challenge
IPasswordPolicyService / IPasswordExpiryService
- Verification de l'historique des mots de passe
- Detection d'expiration de mot de passe
- Periode d'avertissement avant expiration
ISecurityAudit
Journalisation structuree de tous les evenements de securite : login, logout, registration, 2FA, social auth, session management, etc.
IDeviceInfoProvider
Extraction des informations de l'appareil depuis la requete HTTP (IP, User-Agent) avec parsing du User-Agent via UAParser.
Permissions
Definies dans Identity.Constants.Permissions :
public const string UsersActivate = "users.activate";
public const string UsersDeactivate = "users.deactivate";
public const string SessionsViewAny = "sessions.view_any";
public const string SessionsRevokeAny = "sessions.revoke_any";
DbContext
IdentityContext herite de IdentityDbContext<User, Role, Guid, UserClaim, UserRole, UserLogin, RoleClaim, UserToken>.
DbSets exposes :
UserSessionsPasswordHistoriesOtpRecordsPushTokensGroups,GroupRoles,UserGroupsIdempotencyRecordsTwoFactorChallengesUserSecuritySettings
Le context supporte les transactions explicites (BeginTransactionAsync, CommitTransactionAsync, RollbackTransactionAsync) et la gestion automatique du versioning (IVersion).
Configuration
Les options de configuration sont definies dans Infrastructure/Auth/Options/ :
- JwtOptions : cle privee RSA, issuer, audience, duree de vie du access token
- SessionOptions : duree de session, nombre max de sessions, binding de session
- OtpOptions : longueur du code, duree de validite, nombre max de tentatives
- PasswordPolicyOptions : longueur minimale, historique, expiration
- RateLimitingOptions : limites par politique (registration, auth, sessions, admin, 2FA)
- SocialAuthOptions : client IDs pour Google, Facebook, Apple
- TokenSecurityOptions : pepper pour le hash des refresh tokens