# Dépannage : identité

> Jetons refusés, portées, clés d'API, certificats clients et origines CORS : le symptôme, sa cause et quoi faire.

Dépannage - Depuis la version 0.3.0 - Flexway v1.7.1 - https://flexway.io/docs/operations-troubleshooting-identity/

> Guide d'exploitation : configurer, déployer et observer la passerelle. Ce que fait la fonctionnalité côté produit : [guide produit](https://flexway.io/docs/product-overview/) ; l'appeler : [guide développeur](https://flexway.io/docs/developer-overview/).

| Symptôme | Cause | Action |
| --- | --- | --- |
| `401` sur des jetons valides juste après un démarrage | Les clés de l'émetteur ne sont pas encore chargées | Le journal dit `issuer not reachable yet` ; vérifier que la passerelle joint l'URL de découverte |
| `401` `invalid_token` sur un jeton qui marche ailleurs | Audience, émetteur ou algorithme : le motif est au journal (`token refused`), jamais dans la réponse | Comparer `aud` et `iss` du jeton à `auth.issuers` |
| `403` `insufficient_scope` | Le jeton ne porte pas la portée ou le rôle que le **contrat** exige | Lire `scope=` dans `WWW-Authenticate` ; pour un rôle, vérifier `roles_claim` |
| `401` `WWW-Authenticate: ApiKey` sur une clé qu'on croit bonne | Clé inconnue (retirée, mal copiée), expirée, ou sans le préfixe `fwk_` | Le journal (`API key refused`) donne la cause et, pour une clé expirée, son `id` ; recréer la clé |
| `401` « does not accept API keys » | L'opération n'a pas d'alternative `apiKey` dans le contrat | Ajouter `{ key: [] }` à son `security`, si c'est voulu |
| `403` `not bound to this operation` (clé ou certificat) | L'entrée ne nomme pas cette opération | Ajouter l'`operationId` à `operations` de l'entrée ; rechargement |
| Refus au chargement « no contract declares » sur une clé ou un certificat | L'entrée nomme une opération qui n'existe pas (renommée ?) | Corriger l'`operationId` |
| `401` « requires a client certificate » malgré un certificat | Certificat non déclaré, ou `x-forwarded-client-cert` venu d'un pair hors `server.trusted_proxies` | Vérifier l'URI SAN ou le sujet face à `auth.mtls.clients` ; déclarer la plage de l'edge |
| Poignée de main TLS refusée sur `:8443` | Certificat client d'une autre autorité que `client_ca_file` | Ajouter l'autorité au fichier : il est relu sans redémarrage |
| `403` « This origin is not allowed » | L'origine du navigateur n'est dans aucune politique `cors` | L'ajouter à `allow_origins` |
