Aller au contenu principal
Cette page vous a-t-elle été utile ?

Authentification API

Gestion des identités et des sessions

Enregistrer les utilisateurs, émettre des sessions, terminer l'intégration et gérer les clés API

Cette page documente la surface d'authentification non-administrateur à partir du code backend. Il couvre le de véritables itinéraires /api/auth et une gestion /api/api-keys appartenant à l'utilisateur.

Porteur JWTActualiser les cookiesCSRF pour les mutations du navigateurMFA et OAuth

Modèle d'authentification​

ModeOù cela s'appliqueRemarques
Publiqueinscription, connexion, contrôles de disponibilité, actualisation, rappels OAuthAucun jeton au porteur requis
Porteur JWTitinéraires les plus fréquentésAuthorization: Bearer <token>
Actualiser le cookieflux d'actualisation/déconnexion du navigateurLes requêtes POST ont toujours besoin de CSRF lorsqu'elles sont authentifiées par cookie
Clé utilisateur APIitinéraires sélectionnés protégés par JwtAuthGuardEnvoyez x-api-key ou Authorization: ApiKey <token>
JWT uniquementPoints de terminaison de gestion /api/api-keysCeux-ci utilisent AuthGuard('jwt'), et non le JwtAuthGuard plus large.

Notes de mise en œuvre importantes :

  • JwtAuthGuard prend également en charge les clés utilisateur API lorsque ApiKeyService est connecté.
  • Les utilisateurs dont l'intégration est incomplète sont bloqués sur la plupart des itinéraires non /auth jusqu'à ce que l'intégration soit terminée.
  • Les requêtes de mutation basées sur le navigateur utilisent la protection CSRF et doivent inclure x-csrf-token.

Référence du point de terminaison​

Contrôleur d'authentification​

MéthodeCheminObjectifDemande ou requêteAuthentification
GET/api/auth/csrfÉmettez ou renvoyez le jeton CSRF actif.AucunPublique
POST/api/auth/registerCréez un nouvel utilisateur et émettez des jetons de session.Corps : username,email,password,firstName,lastName,rolePublique
POST/api/auth/loginCréez une session pour un utilisateur existant.Corps : username,password,captchaToken,mfaCode,mfaRecoveryCodePublique
GET/api/auth/username-availabilityVérifiez si un nom d'utilisateur est gratuit.Requête : usernamePublique
GET/api/auth/email-availabilityVérifiez si un e-mail est gratuit.Requête : emailPublique
GET/api/auth/profileLisez l’instantané du profil utilisateur authentifié.AucunClé JWT ou utilisateur API
POST/api/auth/complete-onboardingTerminez l’assistant d’intégration pour l’utilisateur actuel.Corps : champs d'intégrationClé JWT ou utilisateur API
POST/api/auth/refreshFaites pivoter le jeton d'actualisation et émettez un nouveau jeton d'accès.Corps : refreshToken ou cookie d'actualisationFlux de session publique
POST/api/auth/logoutRévoquez la famille de jetons d'actualisation actuelle et effacez les cookies du navigateur.Corps : facultatif refreshTokenClé JWT ou utilisateur API
POST/api/auth/widget-tokenÉmettez le jeton du widget Android.AucunClé JWT ou utilisateur API
GET/api/auth/mfa/statusLisez la configuration de MFA ou l'état activé.AucunClé JWT ou utilisateur API
POST/api/auth/mfa/setupDémarrez la configuration de TOTP et renvoyez le matériel de mise à disposition.AucunClé JWT ou utilisateur API
POST/api/auth/mfa/enableVérifiez un code TOTP et activez MFA.Corps : codeClé JWT ou utilisateur API
POST/api/auth/mfa/disableDésactivez MFA avec un code actuel ou un code de récupération.Corps : code,recoveryCodeClé JWT ou utilisateur API
GET/api/auth/googleDémarrez Google OAuth.AucunRedirection publique
GET/api/auth/google/callbackRappel Google OAuth.Paramètres de requête du fournisseurRappel public
GET/api/auth/microsoftDémarrez Microsoft OAuth.AucunRedirection publique
GET/api/auth/microsoft/callbackRappel Microsoft OAuth.Paramètres de requête du fournisseurRappel public

Clés utilisateur API​

MéthodeCheminObjectifDemande ou requêteAuthentification
GET/api/api-keysRépertoriez les clés API de l'utilisateur actuel.AucunPorteur JWT uniquement
POST/api/api-keysCréez une nouvelle clé API.Corps : name,scopes,tier,expiresInDays,rotateInDaysPorteur JWT uniquement
POST/api/api-keys/:id/rotateFaites pivoter une clé API et renvoyez une fois le nouveau secret en texte brut.Chemin : idPorteur JWT uniquement
DELETE/api/api-keys/:idRévoquer une clé API.Chemin : idPorteur JWT uniquement

Demander des formes​

S'inscrire​

RegisterDto

  • username : obligatoire, épuré, texte sécurisé, 3 à 64 caractères
  • email : obligatoire, en minuscules, e-mail valide, maximum 254 caractères
  • password : obligatoire, 6 à 128 caractères, validateur de mot de passe fort
  • firstName : facultatif, texte sécurisé, maximum 80 caractères
  • lastName : facultatif, texte sécurisé, maximum 80 caractères
  • role : énumération facultative UserRole

Connexion​

LoginDto

  • username : obligatoire, 1 à 254 caractères, nom d'utilisateur ou email
  • password : obligatoire, 1 à 128 caractères
  • captchaToken : facultatif, maximum 2 048 caractères
  • mfaCode : facultatif, doit correspondre à ^\d{6}mfaCode` : facultatif, doit correspondre à
  • mfaRecoveryCode : facultatif, 32 caractères maximum

Intégration complète​

CompleteOnboardingDto

  • username : facultatif, 3 à 64 caractères, [a-zA-Z0-9_.]+
  • firstName : facultatif, maximum 80 caractères
  • lastName : facultatif, maximum 80 caractères
  • profilePictureUrl : URL facultative, maximum 2 048 caractères
  • language : énumération requise en|de|fr|hu
  • timezone : fuseau horaire IANA requis, maximum 100 caractères
  • timeFormat : obligatoire 12h|24h
  • weekStartDay : entier obligatoire 0..6
  • defaultCalendarView : obligatoire month|week
  • themeColor : obligatoire, l'une des couleurs de la palette d'intégration autorisées
  • privacyPolicyAccepted : obligatoire, doit être true
  • termsOfServiceAccepted : obligatoire, doit être true
  • productUpdatesEmailConsent : booléen facultatif
  • privacyPolicyVersion : facultatif, 64 caractères maximum
  • termsOfServiceVersion : facultatif, 64 caractères maximum
  • calendarUseCase : énumération facultative personal|business|team|other
  • setupGoogleCalendarSync : booléen facultatif
  • setupMicrosoftCalendarSync : booléen facultatif

MFA​

  • EnableMfaDto.code : chaîne de 6 chiffres obligatoire
  • DisableMfaDto.code : chaîne facultative à 6 chiffres
  • DisableMfaDto.recoveryCode : facultatif, 32 caractères maximum

Clés utilisateur API​

CreateApiKeyDto

  • name : obligatoire, texte sécurisé, maximum 120 caractères
  • scopes : tableau d'énumérations facultatif read|write|admin
  • tier : énumération facultative guest|user|premium
  • expiresInDays : entier facultatif, minimum 1
  • rotateInDays : entier facultatif, minimum 1

Exemples d'appels​

Démarrer une session de navigateur​

curl "$PRIMECAL_API/api/auth/csrf" -c cookies.txt
curl -X POST "$PRIMECAL_API/api/auth/login" \
-b cookies.txt \
-c cookies.txt \
-H "Content-Type: application/json" \
-H "x-csrf-token: $CSRF_TOKEN" \
-d '{
"username": "alexexample",
"password": "<your-password>"
}'

Intégration complète​

curl -X POST "$PRIMECAL_API/api/auth/complete-onboarding" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"language": "en",
"timezone": "Europe/Budapest",
"timeFormat": "24h",
"weekStartDay": 1,
"defaultCalendarView": "week",
"themeColor": "#3b82f6",
"privacyPolicyAccepted": true,
"termsOfServiceAccepted": true,
"calendarUseCase": "personal"
}'

Créer une clé utilisateur API​

curl -X POST "$PRIMECAL_API/api/api-keys" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "calendar-sync-job",
"scopes": ["read", "write"],
"tier": "user",
"expiresInDays": 90,
"rotateInDays": 30
}'

Notes de réponse​

  • AuthResponseDto renvoie access_token, token_type, expires_in, refresh_expires_at, issued_at, refresh_token en option et un bloc user.
  • Les clients natifs peuvent recevoir un texte en clair refresh_token ; les flux du navigateur s'appuient sur le cookie d'actualisation.
  • La création et la rotation de la clé API renvoient la clé API en texte brut une seule fois.

Meilleures pratiques​

  • Utilisez GET /api/auth/csrf avant tout appel POST, PATCH, PUT ou DELETE sauvegardé par un cookie à partir d'un client de navigateur.
  • Traitez /api/auth/refresh comme un point de terminaison de maintenance de session, et non comme un chemin de connexion principal.
  • Gardez les invites MFA conditionnelles. N'envoyez mfaCode ou mfaRecoveryCode que lorsque le flux de connexion l'exige.
  • Utilisez les clés utilisateur API pour l'automatisation des utilisateurs de serveur à serveur, mais utilisez l'authentification du porteur JWT pour la gestion /api/api-keys elle-même.
  • Préférez les redirections de fournisseurs à partir de /api/auth/google et /api/auth/microsoft au lieu de créer vos propres URL OAuth.