> ## Documentation Index
> Fetch the complete documentation index at: https://docs.colismove.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Authentification

> Authentification basée sur JWT avec tokens d'accès et de rafraîchissement

# Authentification

L'API ColisMove utilise les **JWT (JSON Web Tokens)** pour une authentification sans état. Après connexion, vous recevez un token d'accès et un token de rafraîchissement.

## Types de tokens

| Token         | Durée de vie | Usage                                      |
| ------------- | ------------ | ------------------------------------------ |
| Access Token  | 15 minutes   | Authentifie les requêtes API               |
| Refresh Token | 7 jours      | Permet d'obtenir de nouveaux access tokens |

## Flux d'authentification

```mermaid theme={null}
sequenceDiagram
    participant Client
    participant API

    Client->>API: POST /auth/login {email, password}
    API->>Client: {accessToken, refreshToken, user}

    Client->>API: GET /annonces (Authorization: Bearer {accessToken})
    API->>Client: 200 OK

    Note over Client,API: L'access token expire après 15 min

    Client->>API: POST /auth/refresh {refreshToken}
    API->>Client: {accessToken, refreshToken}
```

## Utiliser le token d'accès

Inclure le token d'accès dans l'en-tête `Authorization` de chaque requête :

```bash theme={null}
curl -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
  https://api.colismove.com/v1/api/user/me
```

## Rafraîchir les tokens

Lorsque le token d'accès expire (HTTP 401), utilisez le token de rafraîchissement pour en obtenir une nouvelle paire :

```bash theme={null}
curl -X POST https://api.colismove.com/v1/api/auth/refresh \
  -H "Content-Type: application/json" \
  -d '{"refreshToken": "votre-refresh-token"}'
```

## Connexion OAuth2

ColisMove prend en charge la connexion sociale via :

* **Google OAuth2** — `POST /v1/api/auth/oauth2/google`
* **Apple OAuth2** — `POST /v1/api/auth/oauth2/apple`

Les deux retournent la même paire de tokens JWT qu'une connexion classique.

## Rôles

| Rôle                   | Description            | Capacités                                       |
| ---------------------- | ---------------------- | ----------------------------------------------- |
| `ROLE_CLIENT`          | Utilisateur par défaut | Parcourir, réserver des transports              |
| `ROLE_VERIFIED_USER`   | KYC approuvé           | Créer des annonces, transporter des colis       |
| `ROLE_AGENCY_OWNER`    | Propriétaire d'agence  | Gérer une agence, ses branches et ses employés  |
| `ROLE_AGENCY_EMPLOYEE` | Employé d'agence       | Gérer les annonces de sa branche                |
| `ROLE_ADMIN`           | Administrateur         | Gestion utilisateurs, consultation des rapports |
| `ROLE_SUPERADMIN`      | Super-administrateur   | Contrôle complet de la plateforme, audit logs   |

## Déconnexion

Pour invalider vos tokens :

```bash theme={null}
curl -X POST https://api.colismove.com/v1/api/auth/logout \
  -H "Authorization: Bearer {accessToken}" \
  -H "Content-Type: application/json" \
  -d '{"refreshToken": "votre-refresh-token"}'
```

<Warning>
  Après déconnexion, le token d'accès et le token de rafraîchissement sont tous deux blacklistés et ne peuvent plus être réutilisés.
</Warning>
