Saltar al contenido

Proveedor de Seguridad: Clave API

El proveedor de seguridad de clave API permite a los administradores proteger las APIs REST de Vinyl mediante "claves API ". Una clave API es un código generado por Vinyl. El consumidor pasa la clave API a Vinyl cuando realiza solicitudes de API REST. Debido a que cada clave API está asociada con un usuario individual, esto proporciona tanto autenticación como autorización.

Claves API Frente a Nombre de Usuario y Contraseñas

Una clave API es similar a un nombre de usuario y contraseña en el sentido de que es un secreto compartido entre el cliente y el servidor. Las claves API comparten varias debilidades con los esquemas de autenticación de nombre de usuario y contraseña, como la autenticación básica HTTP:

  • Las claves API pueden filtrarse.
  • La distribución de claves API puede resultar difícil de gestionar.

Sin embargo, las claves API tienen ventajas sobre los nombres de usuario y las contraseñas:

  • Las claves API tienen mayor entropía que las combinaciones de nombre de usuario/contraseña.
  • Las claves API pueden sobrevivir a un restablecimiento de contraseña.
  • Las claves API se pueden revocar fácilmente.
  • Las claves API se pueden rotar.
  • Las claves API son más rápidas. Las contraseñas deben tener hash, lo cual es deliberadamente lento.

Usos de la Clave API

A pesar de las debilidades de las claves API, aún pueden ser apropiadas para ciertos escenarios, que incluyen:

  • Cuentas de nivel de servicio
  • Comunicación de aplicación a aplicación
  • Comunicación de servidor a servidor
  • Acceso de sólo lectura
  • Información no sensible

Material de Clave API

Las claves API de Vinyl constan de un número criptográficamente aleatorio de 128 bits. Las claves están codificadas en base64url.

El siguiente es un ejemplo de una clave API:

DLOo9sPS5slJEMHpXBFt3g

Configuración

Parámetros

El proveedor de seguridad de la clave API define los siguientes parámetros:

Parámetro Valor predeterminado Descripción
AllowApiKeyInQueryString Falso Indica si el proveedor de seguridad debe aceptar las claves API pasadas en la cadena de consultar. De forma predeterminada, el proveedor de seguridad solo permitirá que se pasen claves API en los encabezados de solicitud HTTP. Vea abajo para más información.
Permitir conexiones HTTP no seguras Falso Indica si el proveedor de seguridad debe aceptar claves API enviadas a través de una solicitud HTTP insegura. De forma predeterminada, el proveedor de seguridad solo permitirá que las claves API se pasen a través de una conexión HTTPS segura. Vea abajo para más información.

Encabezado HTTP Frente a Cadena de Consultar

Normalmente, el cliente pasará la clave API a través de un encabezado personalizado. El encabezado debe denominarse X- API-Key. Esto limita el riesgo de exposición. Por ejemplo, a diferencia de los parámetros de cadena de consultar, los encabezados HTTP rara vez se registran en el disco.

El siguiente ejemplo demuestra cómo pasar la clave API como un encabezado HTTP:

GET /Vinyl/rest/v1/sales/customers HTTP/1.1
Host: example.com:443
Accept: application/json
X-API-Key: DLOo9sPS5slJEMHpXBFt3g

Es posible que algunos clientes no tengan acceso a los encabezados de solicitud HTTP. Si este es el caso y no hay otra solución disponible, los administradores de seguridad pueden habilitar la opción AllowApiKeyInQueryString. Esto obligará a Vinyl a aceptar la clave API como parámetro de cadena de consultar. El parámetro de cadena de consultar debe denominarse apiKey.

El siguiente ejemplo demuestra cómo pasar la clave API como parámetro de cadena de consultar:

GET /Vinyl/rest/v1/sales/customers?apiKey=DLOo9sPS5slJEMHpXBFt3g HTTP/1.1
HOST: example.com:443
Accept: application/json

Tenga en cuenta que aquí existe un conflicto potencial. Al consultar la API REST, los parámetros de cadena de consultar normalmente se asignan a nombres de campos de recursos. Si las claves API se pueden pasar como parámetro de cadena de consultar, entonces los recursos no pueden tener un campo llamado "apiKey".

HTTPS Frente a HTTP

Para evitar ataques de intermediario, las claves API deben pasarse a través de una conexión HTTPS segura. Vinyl aplica esto ignorando las claves API pasadas a través de HTTP.

Sin embargo, en algunos ambientes, la conexión HTTPS puede finalizar antes que el servidor web. En este escenario, los administradores de seguridad pueden habilitar la opción AllowUnsafeHttpConnections para obligar a Vinyl a aceptar claves API enviadas a través de conexiones HTTP inseguras.