Le plug-in key-auth authentifie les requêtes en extrayant les clés API des paramètres d'URL ou des en-têtes HTTP, puis en validant les autorisations d'accès.
Obtenir une clé API (identifiant)
Chaque appelant s'authentifie à l'aide d'une valeur credential définie dans la configuration du plug-in. Il s'agit d'une chaîne de caractères que vous spécifiez. Aucune application console n'est requise.
Lorsque vous définissez une credential, respectez les consignes suivantes :
Utilisez une chaîne aléatoire d'au moins 32 caractères, par exemple au format UUID :
2bda943c-ba2b-11ec-ba07-00163e125d8fGardez-la secrète. Ne l'exposez pas dans le code côté client ni dans la documentation publique.
Pour attribuer des autorisations différentes à plusieurs appelants, définissez une
credentialunique pour chacun et configurez-les dans le champconsumers.
Type de plug-in
Authentification et autorisation.
Champs
Configuration d'authentification
|
Élément de configuration |
Type de données |
Obligatoire |
Valeur par défaut |
Description |
|
consumers |
array of object |
Oui |
- |
Appelants de service pour l'authentification des requêtes. |
|
keys |
array of string |
Oui |
- |
Noms des paramètres d'URL ou des en-têtes HTTP depuis lesquels extraire les clés API. |
|
in_query |
bool |
Au moins l'un des champs |
true |
Lorsqu'il est défini sur |
|
in_header |
bool |
Au moins l'un des champs |
true |
Lorsqu'il est défini sur |
|
global_auth |
array of string |
Non (obligatoire uniquement pour les configurations au niveau de l'instance) |
- |
Uniquement au niveau de l'instance. Si la valeur est true, l'authentification s'applique globalement. Si la valeur est false, l'authentification s'applique uniquement aux domaines et routes configurés. Si ce champ n'est pas défini, l'authentification globale est activée uniquement lorsqu'aucun domaine ni aucune route n'est configuré. |
Champs de l'objet consumers :
|
Élément de configuration |
Type de données |
Obligatoire |
Valeur par défaut |
Description |
|
credential |
string |
Oui |
- |
Identifiant d'accès pour le consommateur. |
|
name |
string |
Oui |
- |
Nom du consommateur. |
Configuration d'autorisation (facultative)
|
Élément de configuration |
Type de données |
Obligatoire |
Valeur par défaut |
Description |
|
allow |
array of string |
Non (obligatoire pour les configurations autres qu'au niveau de l'instance) |
- |
Uniquement au niveau de la route ou du domaine. Liste les consommateurs autorisés à accéder aux requêtes correspondantes. |
Les configurations d'autorisation et d'authentification ne peuvent pas coexister dans une même règle.
Pour les requêtes authentifiées, un en-tête
X-Mse-Consumerest ajouté pour identifier l'appelant.
Exemple
Authentification globale avec autorisation au niveau de la route
Cet exemple configure l'authentification au niveau de l'instance et l'autorisation au niveau de la route et du domaine. Chaque valeur credential doit être unique.
Configuration du plug-in au niveau de l'instance :
global_auth: false
consumers:
- credential: 2bda943c-ba2b-11ec-ba07-00163e125***
name: consumer1
- credential: c8c8e9ca-558e-4a2d-bb62-e700dcc40***
name: consumer2
keys:
- apikey
- x-api-key
Configuration du plug-in pour les routes route-a et route-b :
allow:
- consumer1
Configuration du plug-in pour les domaines *.example.com et test.com :
allow:
- consumer2
Lorsqu'une requête correspond à
route-aouroute-b, seul l'appelant dont lenameest défini surconsumer1est autorisé.Lorsqu'une requête correspond à
*.example.comoutest.com, seul l'appelant dont lenameest défini surconsumer2est autorisé.
Requêtes autorisées (correspondant à la route route-a) :
-
Clé API dans un paramètre d'URL :
curl http://xxx.hello.com/test?apikey=2bda943c-ba2b-11ec-ba07-00163e1*** -
Clé API dans un en-tête HTTP :
curl http://xxx.hello.com/test -H 'x-api-key: 2bda943c-ba2b-11ec-ba07-00163e1***'
Une fois l'authentification réussie, l'en-tête X-Mse-Consumer identifie l'appelant. Dans cet exemple, la valeur est consumer1.
Requêtes refusées :
-
Aucune clé API fournie. Renvoie HTTP 401.
curl http://xxx.hello.com/test -
Clé API non valide. Renvoie HTTP 401.
curl http://xxx.hello.com/test?apikey=926d90ac-ba2e-11ec-ab68-00163e1*** -
L'appelant correspondant ne dispose pas de l'autorisation d'accès. Renvoie HTTP 403.
# The caller consumer2 is not in the whitelist of route-a. curl http://xxx.hello.com/test?apikey=c8c8e9ca-558e-4a2d-bb62-e700dcc***
Activer l'authentification à l'échelle de la passerelle
Avec la configuration suivante au niveau de l'instance, toutes les requêtes nécessitent une authentification key-auth.
global_auth: true
consumers:
- credential: 2bda943c-ba2b-11ec-ba07-00163e1***
name: consumer1
- credential: c8c8e9ca-558e-4a2d-bb62-e700dcc***
name: consumer2
keys:
- apikey
- x-api-key
Codes d'erreur
|
Code d'état HTTP |
Message d'erreur |
Raison |
|
401 |
No API key found in request. |
La requête ne contient aucune clé API. |
|
401 |
Request denied by Key Auth check. Invalid API key. |
La clé API n'est pas valide. |
|
403 |
Request denied by Key Auth check. Unauthorized consumer. |
L'appelant ne dispose pas de l'autorisation d'accès. |