Proteger una API solicitando claves de API

Esta página se aplica a Apigee y Apigee Hybrid.

Consulta la documentación de Apigee Edge.

Vídeo: consulta este breve vídeo para obtener una introducción sobre cómo proteger tu API.

Qué vas a aprender

En este tutorial se explica cómo hacer lo siguiente:

  • Crea un proxy de API que requiera una clave de API.
  • Crea un producto de API, un desarrollador y una aplicación para desarrolladores.
  • Llama a tu API con una clave de API.

Es importante proteger tu API frente a accesos no autorizados. Una forma de hacerlo es con claves de API.

Cuando una aplicación envía una solicitud a un proxy de API configurado para verificar una clave de API, la aplicación debe proporcionar una clave válida. En el tiempo de ejecución, la política Verify API Key comprueba que la clave de API proporcionada:

  • Es válido
  • No se ha revocado
  • Coincide con la clave de API del producto de API que expone los recursos solicitados.

Si la clave es válida, se permite la solicitud. Si la clave no es válida, la solicitud dará como resultado un error de autorización.

Crear el proxy de API

  1. Ve a la interfaz de usuario de Apigee e inicia sesión.
  2. Selecciona tu organización en el menú desplegable de la esquina superior izquierda de la interfaz de usuario.
  3. Haz clic en Desarrollo > Proxies de APIs para ver la lista de proxies de APIs.

  4. Haz clic en Crear.
    Botón Crear proxy
  5. En el asistente para crear un proxy, selecciona Proxy inverso (el más habitual).
  6. Configura el proxy de la siguiente manera:
    En este campo haz esto
    Nombre del proxy Introduce: helloworld_apikey
    Ruta base del proyecto

    Cambiar a: /helloapikey

    La ruta base del proyecto forma parte de la URL que se usa para enviar solicitudes al proxy de la API.

    Descripción Introduce: hello world protected by API key
    Destino (API actual)

    Introduce: http://mocktarget.apigee.net

    Define la URL de destino que invoca Apigee en una solicitud al proxy de API. Este destino solo devuelve una respuesta sencilla: Hello, Guest!.

  7. Haz clic en Siguiente.
  8. En la página Políticas comunes, selecciona Clave de API. Esta opción añade automáticamente dos políticas a tu proxy de API y crea un producto de API necesario para generar la clave de API.
  9. Haz clic en Siguiente.
  10. En la página Resumen, comprueba que se haya seleccionado un entorno de implementación y haz clic en Crear e implementar.
  11. Haz clic en Editar proxy para mostrar la página de descripción general del proxy de API.

Ver las políticas

  1. En el editor de proxy de API, haz clic en la pestaña Desarrollar. Verás que se han añadido dos políticas al flujo de solicitudes del proxy de la API:
    • Verificar clave de API: comprueba la llamada a la API para asegurarse de que se ha enviado una clave de API válida (como parámetro de consulta).
    • Eliminar el parámetro de consulta apikey: una política Assign Message que elimina la clave de API después de comprobarla para que no se transfiera y se exponga innecesariamente.
  2. Haz clic en el icono de la política Verify API Key (Verificar clave de API) en la vista de flujo y consulta la configuración XML de la política en la vista de código inferior. El elemento <APIKey> indica a la política dónde debe buscar la clave de API cuando se realiza la llamada. De forma predeterminada, busca la clave como parámetro de consulta llamado apikey en la solicitud HTTP:

    <APIKey ref="request.queryparam.apikey" />

    El nombre apikey es arbitrario y puede ser cualquier propiedad que contenga la clave de API.

Intenta llamar a la API

En este paso, harás una llamada a la API correcta directamente al servicio de destino y, a continuación, harás una llamada incorrecta al proxy de la API para ver cómo se protege con las políticas.

  1. Operación completada

    En un navegador web, ve a la siguiente dirección. Este es el servicio de destino al que se ha configurado el proxy de API para reenviar la solicitud, pero por ahora accederás a él directamente:

    http://mocktarget.apigee.net

    Deberías obtener esta respuesta correcta: Hello, Guest!

  2. Error

    Ahora, prueba a llamar a tu proxy de API:

    curl -v -k https://YOUR_ENV_GROUP_HOSTNAME/helloapikey

    donde YOUR ENV_GROUP_HOSTNAME es el nombre de host del grupo de entornos. Consulta Buscar el nombre de host del grupo de entornos.

    Sin la política Verify API Key, esta llamada te daría la misma respuesta que la llamada anterior. Sin embargo, en este caso, deberías recibir la siguiente respuesta de error:

    {"fault":{"faultstring":"Failed to resolve API Key variable request.queryparam.apikey","detail":{"errorcode":"steps.oauth.v2.FailedToResolveAPIKey"}}}

    lo que significa, correctamente, que no has proporcionado una clave de API válida (como parámetro de consulta).

En los siguientes pasos, obtendrás la clave de API necesaria.

Añadir un producto de API

Para añadir un producto de API mediante la interfaz de usuario de Apigee, sigue estos pasos:

  1. Selecciona Publicar > Productos de API.
  2. Haz clic en Crear.
  3. Introduce los detalles del producto de API.
    Campo Descripción
    Nombre Nombre interno del producto de API. No especifiques caracteres especiales en el nombre.
    Nota: No puedes editar el nombre una vez que se haya creado el producto de API.
    Nombre visible Nombre visible del producto de la API. El nombre visible se usa en la interfaz de usuario y puedes editarlo en cualquier momento. Si no se especifica, se usará el valor de Name. Este campo se rellena automáticamente con el valor del nombre. Puede editar o eliminar su contenido. El nombre visible puede incluir caracteres especiales.
    Descripción Descripción del producto de la API.
    Entorno Entornos a los que permitirá acceder el producto de API. Por ejemplo, test o prod.
    Acceso Selecciona Public (Públicas).
    Aprobar automáticamente las solicitudes de acceso Habilita la aprobación automática de solicitudes de claves para este producto de API desde cualquier aplicación.
    Cuota Ignóralo en este tutorial.
    Permisos de OAuth permitidos Ignóralo en este tutorial.
  4. En la sección Operaciones, haz clic en AÑADIR UNA OPERACIÓN.
  5. En el campo Proxy de API, selecciona el proxy de API que acabas de crear.
  6. En el campo Ruta, introduce "/". Ignora los demás campos.
  7. Haz clic en Guardar para guardar la operación.
  8. Haz clic en Guardar para guardar el producto de la API.

Añadir un desarrollador y una aplicación a tu organización

A continuación, vamos a simular el flujo de trabajo de un desarrollador que se registra para usar tus APIs. Un desarrollador tendrá una o varias aplicaciones que llamen a tus APIs, y cada aplicación obtendrá una clave de API única. De esta forma, tú, como proveedor de APIs, tendrás un control más detallado sobre el acceso a tus APIs y sobre los informes de tráfico de las APIs por aplicación.

Crear un desarrollador

Para crear un desarrollador, sigue estos pasos:

  1. En el menú, selecciona Publicar > Desarrolladores.
    Nota: Si sigues en la pantalla Desarrollo, haz clic en el icono "<" situado junto a DESARROLLO para mostrar el menú y selecciona Publicar > Desarrolladores.
  2. Haz clic en + Desarrollador.
  3. En la ventana Nuevo desarrollador, introduce lo siguiente:
    En este campo intro
    Nombre Keyser
    Apellidos Soze
    Username (Nombre de usuario) keyser
    Correo electrónico keyser@example.com
  4. Haz clic en Crear.

Registrar una aplicación

Para registrar una aplicación de desarrollador, sigue estos pasos:

  1. Selecciona Publicar > Aplicaciones.
  2. Haz clic en + Aplicación.
  3. En la ventana Nueva aplicación de desarrollador, introduce lo siguiente:
    En este campo haz esto
    Nombre y Nombre visible Introduce: keyser_app
    Desarrolladores Seleccionar: Keyser Soze (keyser@example.com)
    URL de retrollamada y Notas Dejar en blanco
  4. En la sección Credenciales, selecciona Nunca. Las credenciales de esta aplicación no caducarán nunca.
  5. Haga clic en Añadir producto.
  6. Selecciona el producto que acabas de crear.
  7. Haz clic en Crear.

Obtener la clave de API

Para obtener la clave de API, sigue estos pasos:

  1. En la página Aplicaciones (Publicar > Aplicaciones), haz clic en keyser_app.
  2. En la página keyser_app, haz clic en Mostrar junto a Clave en la sección Credenciales. Verá que la clave está asociada al producto que ha creado.
  3. Selecciona y copia la clave. Lo usarás en el siguiente paso.

Llamar a la API con una clave

Ahora que tienes una clave de API, puedes usarla para llamar al proxy de API. Pega la clave de API como se muestra, como parámetro de consulta. Asegúrate de que no haya espacios adicionales en el parámetro de consulta.

curl -v -k https://YOUR_ENV_GROUP_HOSTNAME/helloapikey?apikey=your_api_key

Ahora, cuando llames al proxy de API, deberías recibir esta respuesta: Hello, Guest!

¡Enhorabuena! Has creado un proxy de API y lo has protegido exigiendo que se incluya una clave de API válida en la llamada.

Ten en cuenta que, por lo general, no es recomendable enviar una clave de API como parámetro de consulta. Te recomendamos que lo incluyas en el encabezado HTTP.

Práctica recomendada: pasar la clave en el encabezado HTTP

En este paso, modificará el proxy para que busque la clave de API en un encabezado llamado x-apikey.

  1. Edita el proxy de API. Selecciona Desarrollar > Proxies de API > helloworld_apikey y ve a la vista Desarrollar.
  2. Seleccione la política Verificar clave de API y modifique el XML de la política para indicarle que busque en header en lugar de en queryparam:

    <APIKey ref="request.header.x-apikey"/>
  3. Guarda el proxy de API y usa Desplegar para desplegarlo.
  4. Haz la siguiente llamada a la API con cURL para enviar la clave de API como un encabezado llamado x-apikey. No olvides sustituir el nombre de tu organización.

    curl -v -H "x-apikey: {api_key_goes_here}" http://YOUR_ENV_GROUP_HOSTNAME/helloapikey

Ten en cuenta que, para completar el cambio, también tendrías que configurar la política Asignar mensaje para que elimine el encabezado en lugar del parámetro de consulta. Por ejemplo:

<Remove>
  <Headers>
      <Header name="x-apikey"/>
  </Headers>
</Remove>

Temas relacionados

Estos son algunos temas relacionados con los productos y las claves de API:

La protección de APIs suele implicar medidas de seguridad adicionales, como OAuth, un protocolo abierto que intercambia credenciales (como el nombre de usuario y la contraseña) por tokens de acceso. Los tokens de acceso son cadenas largas y aleatorias que se pueden transmitir a través de una canalización de mensajes, incluso de una aplicación a otra, sin poner en riesgo las credenciales originales.

Para obtener una visión general de los temas relacionados con la seguridad, consulta Proteger un proxy.