# Compte

Votre compte est votre identité sur Bastide : une adresse de courriel, un mot de passe, éventuellement un second facteur, et les jetons que vous frappez pour vos scripts. Cette page dit comment l'ouvrir, s'y connecter, le protéger et gérer ce qui agit en votre nom. Tout se règle sur l'écran **Compte** de la console, qui vaut quelle que soit l'organisation ouverte.

## Créer un compte

1. Ouvrez `https://console.bastide.app/creer-un-compte`.
2. Saisissez votre adresse de courriel et le nom de l'organisation à créer (de 2 à 100 caractères), cochez les conditions de la bêta, puis « Recevoir le lien ».
3. Le courriel reçu porte un lien valable sept jours, à usage unique, vers **Ouvrir un compte** (`/ouvrir-un-compte`).
4. Choisissez votre mot de passe ; le nom de l'organisation peut encore s'y corriger. « Ouvrir le compte » crée le compte et l'organisation, dont vous devenez **Propriétaire**.

La demande ne crée rien par elle-même : elle fait partir une invitation à l'adresse donnée, et ouvrir le courriel prouve que l'adresse est la vôtre. La réponse est la même que l'adresse porte déjà un compte ou non : elle ne dit pas qui est inscrit. Pour la même raison, un compte déjà ouvert ne reçoit aucun lien.

Trois plafonds bornent les demandes : trois liens par heure pour une même adresse, dix demandes par heure depuis une même adresse IP, trois cents inscriptions par jour pour toute la plateforme.

### Rejoindre une organisation existante

Si un membre vous invite, son courriel mène à **Rejoindre une organisation**, qui montre l'organisation, le rôle et qui vous invite. Sans compte, vous y choisissez votre mot de passe et entrez directement ; avec un compte, vous rejoignez sous votre session. Voir [Organisations](organizations.md).

### Par l'API

L'inscription est hors du registre des opérations, puisque la personne n'a pas encore d'identité :

```sh
curl -X POST https://api.bastide.app/v1/account/signup/request \
  -H "Content-Type: application/json" \
  -d '{ "email": "vous@exemple.fr", "organizationName": "Mon équipe" }'
```

La réponse est `202` dans tous les cas. Le lien reçu s'accepte ensuite par `POST /v1/account/signup`, avec le jeton d'invitation (`ins_…`), le mot de passe et, au choix, le nom de l'organisation.

## Se connecter

L'écran **Connexion** offre trois chemins.

### Par mot de passe

Votre adresse et votre mot de passe, puis « Ouvrir la console ». Vous recevez une **session** : elle dure huit heures au plus et se ferme après soixante minutes sans geste. Si votre compte appartient à plusieurs organisations, la console vous propose de choisir, la dernière choisie sur ce poste d'abord.

Si votre compte tient un second facteur, le mot de passe juste ne suffit pas : l'écran demande ensuite le code de votre application, votre clé d'accès, ou l'un de vos codes de récupération. Ce second temps vaut cinq minutes et cinq essais ; au-delà, on recommence par le mot de passe.

### Par jeton personnel

« Entrer avec un jeton personnel » ouvre la console avec un jeton `pat_…`. Le jeton reste dans l'onglet et disparaît à sa fermeture. C'est le seul chemin d'un compte qui n'a pas encore de mot de passe. Sous un jeton, on ne change ni son mot de passe ni ses seconds facteurs : ces gestes demandent une session ouverte par mot de passe.

### Par authentification unique

« Se connecter avec l'authentification unique » demande l'identifiant (`slug`) de votre organisation et vous envoie chez son fournisseur d'identité OpenID Connect, puis vous ramène. Seuls les comptes provisionnés par l'annuaire de l'organisation (SCIM) entrent par ce chemin, et le second facteur de Bastide reste dû. La configuration de l'authentification unique en libre-service n'est pas encore disponible. Voir [Authentification unique](sso.md).

### Les tentatives

Cinq échecs en quinze minutes, pour un compte depuis une adresse IP, font attendre l'essai suivant : soixante secondes d'abord, puis le double à chaque échec, jusqu'à quinze minutes. La réponse est la même pour une adresse inconnue, un compte suspendu et un mot de passe faux.

## Le mot de passe

- De 12 à 256 caractères.
- Il ne reprend pas votre adresse de courriel et ne figure pas parmi les mots de passe compromis ou trop courants. La vérification se fait sur place, sans appel à un service tiers.
- Seule une empreinte en est gardée.

Pour le changer : **Compte**, section « Mot de passe » : l'actuel, le nouveau, puis le nouveau une seconde fois. Vos autres sessions se ferment ; celle-ci reste ouverte.

### Mot de passe ou second facteur perdu

Sous le formulaire de **Connexion**, « Mot de passe ou second facteur perdu ? » mène à la page `/reinitialiser`, qui offre deux demandes :

| Ce qui est perdu | Ce que vous donnez | Le lien reçu |
| --- | --- | --- |
| Le mot de passe | Votre adresse | Choisit un nouveau mot de passe et ferme toutes vos sessions. Valable une heure (trois jours pour le premier mot de passe d'un compte qui n'en a pas). Il ne retire pas le second facteur. |
| Le second facteur | Votre adresse et votre mot de passe | Retire tous vos seconds facteurs et vos codes de récupération, et ferme vos sessions. Valable une heure. |

Trois liens au plus partent par compte, par genre et par heure. La réponse ne dit jamais si l'adresse a un compte. Perdre à la fois le mot de passe et le second facteur passe par le support : c'est voulu.

## Le second facteur

**Compte**, section « Sécurité ». Deux sortes de facteurs :

- **Une application d'authentification** (codes à six chiffres, renouvelés toutes les trente secondes) : « + Ajouter une application d'authentification », votre mot de passe actuel, puis le code QR ou la clé à saisir, puis un premier code pour confirmer. Un facteur non confirmé dans les quinze minutes n'existe pas.
- **Une clé d'accès** (clé de sécurité, empreinte, téléphone) : « + Ajouter une clé d'accès », votre mot de passe actuel, puis la cérémonie du navigateur.

Au premier facteur confirmé, dix **codes de récupération** s'affichent, une seule fois : rangez-les hors ligne. Chacun sert une fois, à la place du code de l'application. « Émettre de nouveaux codes » en produit dix autres, et les anciens cessent de valoir. Vous pouvez tenir cinq facteurs au plus.

Ajouter ou retirer un facteur demande le mot de passe actuel, et ferme vos autres sessions. Le dernier facteur d'un compte qui tient un rôle de Mainteneur, d'Administrateur ou de Propriétaire ne se retire pas.

> **Attention.** L'écriture SQL, les migrations de schéma et la gestion des clés du backend exigent un second facteur, quelle que soit l'organisation. Un rôle qui les ouvre (Mainteneur, Administrateur, Propriétaire) ne s'attribue qu'à un compte qui tient un facteur confirmé.

### Quand l'organisation l'exige

Le Propriétaire ou le rôle Sécurité peut exiger le second facteur, dans **Réglages** de l'organisation, carte « Second facteur obligatoire ». L'obligation vaut pour les rôles Propriétaire, Administrateur et Sécurité. Une grâce de quatorze jours court ; des relances sont écrites au journal d'audit avant son terme. Passé la grâce, un compte de ces rôles sans facteur confirmé est refusé dans l'organisation (`second_factor_required`), par sa session comme par ses jetons. Enrôler un facteur rouvre l'accès aussitôt.

Un compte de service ne peut tenir aucun facteur : il s'exempte nommément, avec un motif (de 20 à 500 caractères) et une échéance de quatre-vingt-douze jours au plus.

## Les sessions

**Compte**, section « Sessions » : chaque session de console ouverte, d'où elle a été ouverte, son dernier geste et jusqu'à quand elle vaut ; « Cette session » marque la vôtre. Fermer une session la fait refuser au premier appel qui suit. Un changement de mot de passe ou de second facteur ferme les autres sessions ; un changement de rôle les ferme toutes.

## Les jetons personnels

Un jeton personnel est ce qu'on donne à un script, à une intégration ou à la ligne de commande : il appelle l'API en votre nom, dans la limite de votre rang **et** des portées que vous lui nommez. Il est à vous, pas à l'organisation : un administrateur ne voit pas vos jetons.

**Compte**, section « Vos jetons », puis « Frapper un jeton » :

1. **À quoi il sert** : le nom qui se relira dans la liste.
2. **Durée de vie** : 7, 30, 90 (proposé), 180 ou 365 jours. Aucun jeton n'est perpétuel.
3. **Ce qu'il pourra faire** : au moins une portée. La console n'offre que celles que porte votre propre jeton.

| Portée | Ce qu'elle ouvre |
| --- | --- |
| `project:read` | Lire les projets, leurs environnements, leurs déploiements et leurs journaux. |
| `project:write` | Créer et régler des projets, leurs clés et leurs webhooks. |
| `deploy:write` | Déployer, revenir à une release, gérer les prévisualisations. |
| `db:read` | Lire le schéma et la posture de la base d'un projet. |
| `db:write` | Régler la base d'un projet et ses politiques d'accès. |
| `db:destructive` | Supprimer des données, restaurer en écrasant. |
| `secrets:write` | Écrire et supprimer des variables, sensibles comprises. |
| `billing:read` | Lire la consommation. |
| `billing:write` | Régler les plafonds de dépense. |
| `domain:write` | Ajouter et vérifier des domaines. |
| `audit:read` | Lire le journal d'audit. |
| `org:admin` | Gérer l'organisation, ses membres, et ses propres jetons. |

Le jeton s'affiche une seule fois : copiez-le avant « Je l'ai copié ». Bastide n'en garde qu'une empreinte. Vérifiez qu'il ouvre :

```sh
curl -H "Authorization: Bearer $BASTIDE_JETON" https://api.bastide.app/v1/account/personal-access-tokens
```

Ses portées et son échéance sont fixées à la création : il ne se modifie pas, il se révoque. Un jeton inutilisé pendant quatre-vingt-dix jours est désactivé, après un avis ; « Réactiver » le rend utilisable avec les mêmes portées et la même échéance. Cinquante jetons au plus sont en vigueur par compte.

Pour la ligne de commande, `bastide login` frappe le jeton pour vous ; en intégration continue, posez-le dans la variable `BASTIDE_TOKEN`. Pour une intégration qui ne doit pas dépendre d'une personne, préférez un [compte de service](service-accounts.md).

## Les clients MCP autorisés

Quand un agent se branche par OAuth, la console vous montre la page **Autoriser un client MCP** : qui demande, depuis quelle adresse et quoi. **Compte**, section « Clients MCP autorisés », liste chaque client accepté, ses portées et son dernier usage ; le retirer fait tomber ses jetons au premier appel qui suit. Voir [MCP](mcp.md).

## Les notifications du compte

**Compte**, section « Notifications » : pour l'organisation ouverte, quatre genres de fait, et pour chacun les canaux qui vous préviennent (courriel, notification web, application).

| Genre | Quand |
| --- | --- |
| Échec de production | Un déploiement vers la production échoue. |
| Incident ouvert | Un projet entre en anomalie (erreurs, latence, saturation). |
| Mise en ligne | Un déploiement est promu en production. |
| Alerte de facturation | Un seuil ou un plafond de consommation est atteint (Propriétaires, Administrateurs, Facturation). |

Une case cochée s'enregistre tout de suite. Les appareils déclarés par l'application mobile se listent et se retirent au même endroit. Voir [Notifications](notifications.md).

## Les avis reçus

**Compte**, section « Avis reçus » : les messages que la plateforme a adressés à votre compte (un jeton qui dort, une relance du second facteur, un lien, une invitation) et ce qu'ils sont devenus : remis, en attente, refusés par la messagerie ou abandonnés. Utile quand un courriel attendu n'arrive pas.

## Fermer son compte

La fermeture d'un compte en libre-service n'est pas encore disponible, pas plus que la suppression d'une organisation. Écrivez au support : pendant la bêta, vos données vous sont rendues sur demande, puis effacées. Avant cela, vous pouvez supprimer vos projets (voir [Créer un projet](project.md)) et produire une archive de sortie (voir [Sortir de Bastide](leave.md)).

## Erreurs fréquentes

| Code ou message | Sens | Remède |
| --- | --- | --- |
| `identifiants_invalides` | L'adresse et le mot de passe n'ouvrent aucune session. | Vérifiez la saisie, ou demandez un lien de mot de passe. |
| `trop_de_tentatives` | Cinq échecs en quinze minutes. | Attendez le délai de l'en-tête `Retry-After`. |
| `second_facteur_invalide` | Le code n'est pas le bon. | Vérifiez l'heure du téléphone, ou utilisez un code de récupération. |
| `defi_expire` | Le second temps a dépassé cinq minutes ou cinq essais. | Recommencez par le mot de passe. |
| `invitation_invalide` | Le lien d'ouverture est expiré, servi ou inconnu. | Refaites la demande sur `/creer-un-compte`. |
| `compte_existant` | Un compte porte déjà cette adresse. | Connectez-vous, puis faites-vous inviter dans l'organisation voulue. |
| `mot_de_passe_refuse` | Le mot de passe enfreint une règle ; le message dit laquelle. | Choisissez-en un autre ; le lien reste valable. |
| `lien_invalide` | Le lien de réinitialisation est expiré, servi ou remplacé. | Demandez-en un nouveau. |
| `second_factor_required` | L'organisation exige un second facteur, ou le geste en demande un. | Ajoutez un facteur dans **Compte**. |
| `portee_non_detenue` | Un jeton ne peut pas donner une portée qu'il n'a pas. | Frappez le jeton depuis une session qui la porte. |

## Voir aussi

- [Démarrage rapide](quickstart.md)
- [Organisations](organizations.md)
- [Sécurité](security.md)
- [Comptes de service](service-accounts.md)
