# Sécurité des secrets

> Où doit vivre le secret d'une clé, ce que Noryo en conserve et n'en conserve pas, ce qui n'apparaît jamais dans une réponse ou un journal, et quoi faire en cas de fuite.

Une clé Merchant API est un secret porteur : quiconque la détient appelle l'API au nom de votre workspace, et en Production, à vos frais. Cette page décrit ce que Noryo fait du secret et ce qu'il vous revient de faire.

## Où doit vivre le secret

- **Côté serveur uniquement.** Lisez la clé depuis une variable d'environnement ou un gestionnaire de secrets (`NORYO_API_KEY` dans les exemples de cette documentation).
- **Jamais dans un client** : ni dans un bundle JavaScript servi à un navigateur, ni dans une application mobile, ni dans un dépôt de code, ni dans un ticket ou une capture d'écran.
- **Une clé par usage.** Une clé par service ou par déploiement se révoque sans couper les autres. Donnez-lui seulement les scopes dont elle a besoin : un service qui ne fait que relire n'a besoin que de `enrich:read`.

## Ce que Noryo conserve, et ce qu'il ne conserve pas

| Élément | Conservé par Noryo ? |
|---|---|
| Le secret | **Non.** Il est affiché une seule fois, à la création, puis n'existe plus chez Noryo |
| Un vérificateur du secret | Oui : une empreinte HMAC calculée avec une clé de serveur qui n'est pas stockée avec les clés. Une copie de la base ne suffit pas à s'authentifier |
| Le `key_id` et le préfixe | Oui : ils ne sont pas secrets et servent à reconnaître une clé |

Conséquence : Noryo ne peut pas vous renvoyer un secret perdu. Il se remplace. Voir [Rotation](https://developer.noryo.app/fr-FR/merchant/authentication/rotation).

## Ce qui ne sort jamais

- **Dans les réponses** : aucun corps d'erreur ni en-tête ne recopie la clé présentée, une partie du secret ou une empreinte. L'en-tête `WWW-Authenticate` d'un `401` est une valeur fixe.
- **Dans les journaux de Noryo** : l'en-tête `Authorization`, le secret, son vérificateur, le libellé brut, la valeur brute d'une `Idempotency-Key` et l'`external_transaction_id` ne sont jamais journalisés. Pour relier deux lignes, Noryo journalise des empreintes HMAC tronquées, d'où l'on ne peut pas retrouver la valeur.
- **Dans Platform** : la liste des clés montre le préfixe et les quatre derniers caractères du `key_id`, jamais le secret.

## Détecter une fuite

Le préfixe fixe rend une clé reconnaissable dans un dépôt, un journal ou un outil d'analyse de secrets. Une expression adaptée aux clés émises par Noryo :

```text
nry_mer_(sbx|live)_[2-9A-HJKMNP-TV-Z]{10}\.[A-Za-z0-9_-]{43,}
```

Faites de même dans vos propres journaux : ne journalisez jamais l'en-tête `Authorization`, et masquez toute chaîne qui correspond à cette forme.

## En cas de fuite

1. **Révoquez la clé** dans la page [Clés d'API](https://platform.noryo.app/keys) de Platform. Elle est refusée en `401 invalid_api_key` dès la requête suivante. Voir [Révocation](https://developer.noryo.app/fr-FR/merchant/authentication/revocation).
2. **Créez une clé de remplacement** avec les mêmes scopes et déployez-la. Voir [Rotation](https://developer.noryo.app/fr-FR/merchant/authentication/rotation).
3. **Vérifiez l'usage** dans la page [Usage](https://platform.noryo.app/usage) : les appels réglés y figurent avec leur `request_id`.

> **Attention** Révoquer avant d'avoir déployé la nouvelle clé coupe votre propre trafic. En cas de fuite avérée, révoquez d'abord quand même : un `401` de quelques minutes coûte moins qu'une clé utilisée par un tiers.

---

Page canonique : https://developer.noryo.app/fr-FR/merchant/authentication/secret-security
