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)

FeatureCommande/QueryDescription
LoginLoginCommandConnexion par email/mot de passe avec verification 2FA, lockout, expiration du mot de passe
RegisterRegisterCommandInscription avec email, mot de passe et confirmation
LogoutLogoutCommandDeconnexion (revocation de la session courante)
RefreshTokenRefreshTokenCommandRotation du refresh token avec detection de replay
ForgotPasswordForgotPasswordCommandEnvoi d'un OTP pour reinitialiser le mot de passe
ResetPasswordResetPasswordCommandReinitialisation du mot de passe via token
ConfirmEmailConfirmEmailCommandConfirmation de l'adresse email via OTP
ResendConfirmationResendConfirmationCommandRenvoi du lien de confirmation d'email
VerifyOtpVerifyOtpCommandVerification d'un code OTP
ResendOtpResendOtpCommandRenvoi d'un code OTP
ChangePasswordChangePasswordCommandChangement de mot de passe (avec verification de l'ancien)
SocialLoginSocialLoginCommandConnexion via Google, Facebook ou Apple
GetLinkedAccountsGetLinkedAccountsQueryListe des comptes sociaux lies
LinkAccountLinkAccountCommandLier un compte social
UnlinkAccountUnlinkAccountCommandDelier un compte social
JwksEndpoint directExposition des cles publiques JWT (JWKS)

Auth - Sessions

FeatureCommande/QueryDescription
GetMySessionsGetMySessionsQueryListe des sessions actives de l'utilisateur courant
RevokeSessionRevokeSessionCommandRevoquer une session specifique
RevokeAllOtherSessionsRevokeAllOtherSessionsCommandRevoquer toutes les sessions sauf la courante

Auth - Two Factor (2FA / TOTP)

FeatureCommande/QueryDescription
TotpSetupTotpSetupCommandInitier la configuration TOTP (genere sharedKey + authenticatorUri)
TotpVerifyTotpVerifyCommandVerifier le code TOTP pour activer la 2FA
TotpDisableTotpDisableCommandDesactiver la 2FA
Login2FaLogin2FaCommandCompleter la connexion avec le code 2FA
RegenerateRecoveryCodesRegenerateRecoveryCodesCommandRegenerer les codes de recuperation

Auth - Securite et Push

FeatureCommande/QueryDescription
GetSecuritySettingsGetSecuritySettingsQueryObtenir les parametres de securite
UpdateSecuritySettingsUpdateSecuritySettingsCommandMettre a jour les parametres de securite
RegisterPushTokenRegisterPushTokenCommandEnregistrer un token de notification push
UnregisterPushTokenUnregisterPushTokenCommandSupprimer un token de notification push

Admin

FeatureCommande/QueryDescription
ActivateUserActivateUserCommandActiver un compte utilisateur (permission requise)
DeactivateUserDeactivateUserCommandDesactiver un compte utilisateur
AdminGetUserSessionsAdminGetUserSessionsQueryLister les sessions d'un utilisateur (admin)
AdminRevokeSessionAdminRevokeSessionCommandRevoquer une session specifique (admin)
AdminRevokeAllUserSessionsAdminRevokeAllUserSessionsCommandRevoquer toutes les sessions d'un utilisateur (admin)

Entites

User

Herite de IdentityUser<Guid> (ASP.NET Identity). Implemente IVersion et IHasDomainEvents.

ProprieteTypeDescription
IdGuidIdentifiant unique (herite)
UserNamestringNom d'utilisateur (herite)
EmailstringAdresse email (herite)
EmailConfirmedboolEmail confirme (herite)
FirstNamestring?Prenom
LastNamestring?Nom de famille
PassPortNumberstring?Numero de passeport
IsActiveboolCompte actif (defaut: true)
ImageUrlstring?URL de l'avatar
LastPasswordChangeDateDateTime?Date du dernier changement de mot de passe
CreatedAtDateTimeDate de creation
LastLoginAtDateTime?Date de derniere connexion
VersionlongVersion 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.

ProprieteTypeDescription
IdSessionIdIdentifiant de session
UserIdUserIdIdentifiant de l'utilisateur
RefreshTokenHashHashedTokenHash HMAC-SHA256 du refresh token courant
PreviousRefreshTokenHashHashedToken?Hash du token precedent (pour detection de replay)
TokenFamilyIdTokenFamilyIdFamille de tokens (pour revocation en cascade)
IpAddressstring?Adresse IP a la creation
UserAgentstring?User-Agent a la creation
DeviceIdstring?Identifiant de l'appareil
DeviceTypeDeviceType?Type d'appareil (Mobile, Desktop, Tablet, Bot)
Browserstring?Navigateur detecte
OperatingSystemstring?Systeme d'exploitation detecte
CreatedAtDateTimeDate de creation
LastActivityAtDateTimeDerniere activite (rotation de token)
ExpiresAtDateTimeDate d'expiration
RevokedAtDateTime?Date de revocation
RevocationReasonRevocationReason?Raison de la revocation

Role

Herite de IdentityRole<Guid>.

ProprieteTypeDescription
Descriptionstring?Description du role
VersionlongVersion

OtpRecord

Code OTP a usage unique pour les verifications.

ProprieteTypeDescription
IdGuidIdentifiant
UserIdGuidUtilisateur cible
CodeHashstringHash du code OTP
TokenFingerprintstring?Empreinte du token associe
PurposestringObjectif (email_confirm, password_reset, etc.)
ExpiresAtDateTimeDate d'expiration
AttemptsintNombre de tentatives
IsUsedboolCode deja utilise

TwoFactorChallenge

Challenge temporaire pour l'authentification 2FA.

ProprieteTypeDescription
IdGuidIdentifiant
UserIdGuidUtilisateur
TokenFingerprintstringEmpreinte du token
TokenHashstringHash du token de challenge
ExpiresAtDateTimeExpiration
AttemptsintTentatives
IsConsumedboolChallenge 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.

ProprieteTypeDescription
IdGuidIdentifiant
UserIdGuidUtilisateur
PasswordHashstringHash du mot de passe
CreatedAtDateTimeDate d'enregistrement

PushToken

Token de notification push par appareil.

ProprieteTypeDescription
IdGuidIdentifiant
UserIdGuidUtilisateur
TokenstringToken push
PlatformstringPlateforme (iOS, Android)
DeviceIdstring?Identifiant de l'appareil

IdempotencyRecord

Enregistrement d'idempotence pour eviter le traitement en double des requetes.

ProprieteTypeDescription
KeystringCle d'idempotence
RequestIdentitystringIdentite de la requete
RequestBodyHashstringHash du corps de la requete
StatusCodeintCode de reponse HTTP
ResponseBodystringCorps de la reponse mise en cache
ExpiresAtDateTimeExpiration de l'enregistrement

Autres entites ASP.NET Identity

  • UserClaim (IdentityUserClaim<Guid>) : claims utilisateur
  • RoleClaim (IdentityRoleClaim<Guid>) : claims de role
  • UserLogin (IdentityUserLogin<Guid>) : logins externes avec ProviderEmail et LinkedAt
  • UserRole (IdentityUserRole<Guid>) : association utilisateur-role
  • UserSecuritySettings : parametres de securite utilisateur

ValueObjects

Definis dans Identity.ValueObjects.AuthValueObjects :

TypeDescription
UserIdWrapper fort autour de Guid pour l'identifiant utilisateur
SessionIdWrapper fort pour l'identifiant de session
TokenFamilyIdIdentifiant de famille de tokens (rotation et replay)
HashedTokenToken hashe avec HMAC-SHA256 + pepper, expose Hash et Fingerprint
OtpCodeCode OTP avec validation de longueur et format numerique
DeviceInfoInformations sur l'appareil (IP, UserAgent, DeviceId, DeviceType, Browser, OS)
IpAddressValueAdresse IP validee avec methode MaskForUser() pour le masquage
EmailEmail normalise et valide
DeviceTypeEnum : Unknown, Mobile, Desktop, Tablet, Bot
RevocationReasonEnum : 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 signe
  • GenerateRefreshToken() : 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 passe
  • CreateUserWithExternalProviderAsync(UserProfileData) : creation via provider social
  • Retourne un UserCreationResult (Success, DuplicateEmail, WeakPassword, CreationFailed)

IOtpService

  • GenerateOtpAsync(Guid userId, string purpose) : genere un code OTP
  • ValidateOtpAsync(Guid userId, string code, string purpose) : valide un code OTP

ITwoFactorService / ITwoFactorChallengeService

  • IsTwoFactorEnabledAsync() : verifie si 2FA est active
  • ValidateTwoFactorAsync() : valide un code TOTP
  • CreateChallengeAsync() : cree un challenge 2FA temporaire
  • ValidateAndConsumeAsync() : 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 :

  • UserSessions
  • PasswordHistories
  • OtpRecords
  • PushTokens
  • Groups, GroupRoles, UserGroups
  • IdempotencyRecords
  • TwoFactorChallenges
  • UserSecuritySettings

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