El complemento key-auth autentica las solicitudes mediante el análisis de claves de API en parámetros de URL o encabezados HTTP, y valida los permisos de acceso.
Obtener una clave de API (credencial)
Cada solicitante se autentica con un valor credential en la configuración del complemento, que corresponde a una clave de cadena definida por usted. No es necesario realizar ninguna configuración desde la consola.
Al definir una credential, siga estas pautas:
Utilice una cadena aleatoria de 32 caracteres o más; por ejemplo, en formato UUID:
2bda943c-ba2b-11ec-ba07-00163e125d8fManténgala segura. No la exponga en código del lado del cliente ni en documentación pública.
Para asignar distintos permisos a varios solicitantes, defina una
credentialúnica para cada uno y configúrelas en el campoconsumers.
Tipo de complemento
Autenticación y autorización.
Campos
Configuración de autenticación
|
Elemento de configuración |
Tipo de dato |
Obligatorio |
Valor predeterminado |
Descripción |
|
consumers |
array of object |
Sí |
- |
Solicitantes del servicio para la autenticación de solicitudes. |
|
keys |
array of string |
Sí |
- |
Nombres de los parámetros de URL o encabezados HTTP de donde se extraen las claves de API. |
|
in_query |
bool |
Como mínimo, uno de |
true |
Cuando se establece en |
|
in_header |
bool |
Como mínimo, uno de |
true |
Cuando se establece en |
|
global_auth |
array of string |
No (obligatorio solo para configuraciones a nivel de instancia) |
- |
Solo a nivel de instancia. Si es true, la autenticación se aplica de forma global. Si es false, la autenticación se aplica únicamente a los dominios y rutas configurados. Si no se define, la autenticación global se habilita solo cuando no hay dominios ni rutas configurados. |
Campos del objeto consumers:
|
Elemento de configuración |
Tipo de dato |
Obligatorio |
Valor predeterminado |
Descripción |
|
credential |
string |
Sí |
- |
Credencial de acceso del consumidor. |
|
name |
string |
Sí |
- |
Nombre del consumidor. |
Configuración de autorización (opcional)
|
Elemento de configuración |
Tipo de dato |
Obligatorio |
Valor predeterminado |
Descripción |
|
allow |
array of string |
No (obligatorio para configuraciones que no son a nivel de instancia) |
- |
Solo a nivel de ruta o dominio. Enumera los consumidores con permiso para acceder a las solicitudes coincidentes. |
Las configuraciones de autorización y autenticación no pueden coexistir en una misma regla.
En las solicitudes autenticadas, se agrega un encabezado
X-Mse-Consumerpara identificar al solicitante.
Ejemplo
Autenticación global con autorización a nivel de ruta
Este ejemplo configura la autenticación a nivel de instancia y la autorización a nivel de ruta y dominio. Cada valor de credential debe ser único.
Configuración del complemento a nivel de instancia:
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
Configuración del complemento para las rutas route-a y route-b:
allow:
- consumer1
Configuración del complemento para los dominios *.example.com y test.com:
allow:
- consumer2
Cuando una solicitud coincide con
route-aoroute-b, solo se permite el acceso al solicitante cuyonameseaconsumer1.Cuando una solicitud coincide con
*.example.comotest.com, solo se permite el acceso al solicitante cuyonameseaconsumer2.
Solicitudes permitidas (que coinciden con la ruta route-a):
-
Clave de API en un parámetro de URL:
curl http://xxx.hello.com/test?apikey=2bda943c-ba2b-11ec-ba07-00163e1*** -
Clave de API en un encabezado HTTP:
curl http://xxx.hello.com/test -H 'x-api-key: 2bda943c-ba2b-11ec-ba07-00163e1***'
Una vez que la autenticación se completa correctamente, el encabezado X-Mse-Consumer identifica al solicitante. En este ejemplo, el valor es consumer1.
Solicitudes denegadas:
-
No se proporcionó clave de API. Devuelve HTTP 401.
curl http://xxx.hello.com/test -
Clave de API no válida. Devuelve HTTP 401.
curl http://xxx.hello.com/test?apikey=926d90ac-ba2e-11ec-ab68-00163e1*** -
El solicitante coincidente carece de permiso de acceso. Devuelve 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***
Habilitar la autenticación en toda la puerta de enlace
Con la siguiente configuración a nivel de instancia, todas las solicitudes requieren autenticación 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
Códigos de error
|
Código de estado HTTP |
Mensaje de error |
Motivo |
|
401 |
No API key found in request. |
La solicitud no contiene ninguna clave de API. |
|
401 |
Request denied by Key Auth check. Invalid API key. |
La clave de API no es válida. |
|
403 |
Request denied by Key Auth check. Unauthorized consumer. |
El solicitante carece de permiso de acceso. |