Guide développeur Rustwarden
Qu'est-ce que Rustwarden ?
Rustwarden est un framework backend Rust de gestion des utilisateurs et de l'authentification. Il fournit, sous forme de crates Cargo réutilisables, tout ce qu'un service web a besoin : authentification JWT, RBAC granulaire, OAuth2/OIDC, 2FA/TOTP, gestion d'équipes, sessions avec refresh token, file d'envoi d'emails, rate limiting et panneau d'administration optionnel. Le point d'entrée est RustwardenApp::builder(), un builder Rust idiomatique qui compose les couches et lance le serveur Axum.
Rustwarden n'est pas un gestionnaire de mots de passe. Malgré la ressemblance de nom, il n'a aucun lien avec Bitwarden ou Vaultwarden : pas de coffre-fort, pas de chiffrement de secrets personnels, pas d'extension navigateur. Les modules auth, oauth, totp, team, permission, resource sont des primitives génériques conçues pour être branchées dans n'importe quelle application backend SaaS, API REST ou service interne.
Le public cible est double. D'un côté, les développeurs consommateurs qui veulent intégrer Rustwarden dans leur propre projet Rust (SPA frontale séparée, application mobile, micro-service) sans réécrire la couche auth. De l'autre, les contributeurs qui souhaitent étendre le framework — ajouter un provider OAuth, affiner le RBAC, ou contribuer au protocole ActivityPub via rustwarden-fediverse.
Navigation du guide
| Fichier | Contenu |
|---|---|
| 01-architecture-overview.md | Vision globale, carte des crates, couches techniques, axes d'extension, features Cargo |
| 02-request-lifecycle.md | Cycle de vie complet d'une requête authentifiée, login, refresh, logout, extracteur AuthUser |
| 03-configuration.md | Variables d'environnement, AuthConfig, ServerConfig, EmailConfig |
| 04-builder-api.md | RustwardenApp::builder() — toutes les méthodes, exemples d'assemblage |
| 05-consuming-the-framework.md | Intégration pas-à-pas dans un projet Rust existant, ajout de routes custom |
| 06-contributing.md | Conventions de code, règles Clippy, tests, processus de revue |
| 07-security-model.md | Modèle de menace, JWT blacklist, CSRF, rate limiting, bonnes pratiques ANSSI |
| 08-fediverse-integration.md | Branchement de rustwarden-fediverse via traits, ActivityPub headless |
| 09-hooks-and-events.md | Trait RustwardenHooks, liste des événements, exemple d'implémentation |
| 10-testing-and-observability.md | Stratégie de test (538 tests, pyramide, e2e fédération), état de l'observabilité et recommandations V2 |
| 11-audience-measurement.md | Brancher un script de suivi générique (URL + attributs data-*), CSP automatique, opposition du visiteur, migration d'un projet qui l'avait en dur |
Par où commencer ?
flowchart TD
START([Je découvre Rustwarden]) --> Q1{Quel est mon objectif ?}
Q1 -->|Intégrer dans mon projet| CONSO[01 — Architecture overview]
CONSO --> CONSO2[05 — Consuming the framework]
CONSO2 --> CONSO3[04 — Builder API]
Q1 -->|Contribuer au framework| CONTRIB[01 — Architecture overview]
CONTRIB --> CONTRIB2[02 — Request lifecycle]
CONTRIB2 --> CONTRIB3[06 — Contributing]
Q1 -->|Brancher la fédération ActivityPub| FEDI[08 — Fediverse integration]
Q1 -->|Auditer la sécurité| SEC[07 — Security model]
SEC --> SEC2[02 — Request lifecycle]
style START fill:#4a90d9,color:#fff
style FEDI fill:#7c5cbf,color:#fff
style SEC fill:#d94a4a,color:#fff
Glossaire express
| Terme | Définition |
|---|---|
| Principal | Entité qui effectue une action — peut être un utilisateur local, un token personnel ou une identité fédérée. Voir resource_service::Principal. |
| Identity / IdentityKind | Discriminant dans le JWT (`kind: local |
| AuthUser | Extracteur Axum qui valide le JWT entrant et injecte user_id, username, roles, permissions dans le handler. Retourne 401 si le token est absent ou invalide. |
| Claims | Structure sérialisée dans le JWT : sub, jti, exp, iat, iss, aud, username, roles, permissions, kind. |
| jti | JWT ID — identifiant unique de chaque token, utilisé par JwtBlacklistService pour la révocation individuelle. |
| Hook | Méthode du trait RustwardenHooks appelée par le framework à un événement métier (login, logout, inscription, changement de rôle…). Le consumer implémente le trait et passe l'objet au builder. |
| Observer | Synonyme de hook dans le contexte de la fédération ActivityPub : FediverseEventObserver reçoit les activités (Follow, Like, etc.) depuis rustwarden-fediverse. |
| Refresh token | Token opaque (64 chars alphanumériques, stocké haché en SHA-256) échangé contre une nouvelle paire JWT. Rotation automatique à chaque usage ; révocation globale en cas de réutilisation détectée. |
| Blacklist JWT | Table jwt_blacklist qui stocke le hash SHA-256 des tokens révoqués. Consultée à chaque requête par JwtBlacklistService::is_blacklisted. |
| RustwardenApp | Application entièrement configurée, résultat de builder().build().await?. Expose database(), auth_config(), i18n_service() et la méthode run(). |
| RustwardenBuilder | Builder fluide permettant de composer le framework : routes, hooks, UI, fédération, migrations auto, localisation. |
| headless | Mode sans interface HTML — API JSON pure. Activé par .headless() sur le builder ou simplement en n'appelant pas .with_ui(). |
| DashboardCardDTO | DTO permettant aux crates compagnons (rustwarden-fediverse-ui) d'injecter une carte dans le tableau de bord d'administration via add_dashboard_card(). |
| AppError | Type d'erreur central du framework, converti automatiquement en réponse HTTP appropriée par IntoResponse. |
| LocalUserResolver | Trait fédération que rustwarden-core expose pour que rustwarden-fediverse puisse résoudre un acteur AP en compte local sans dépendance inversée. |
Liens utiles
- SERVICES_REFERENCE.md — référence exhaustive de tous les services publics du framework
- constitution.md — règles architecturales et de sécurité du projet
- auth-middleware-layering.md — détail de l'ordre des couches middleware d'authentification
- fediverse.md — documentation du protocole ActivityPub headless
- SECURITY_AUDIT_2026_05.md — dernier audit de sécurité
GitRust