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 hace 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

Apigee en la consola de Cloud

  1. En la Google Cloud consola, ve a la página Desarrollo de proxy > Proxies de API.

    Ir a proxies de API

  2. Selecciona tu organización en el selector de proyectos del panel de Google Cloud. El nombre de la organización es el mismo que el nombre de tu proyecto de Google Cloud.
  3. Haz clic en + Crear.
  4. En el panel Crear un proxy, en Plantilla de proxy, selecciona Proxy inverso (el más habitual). Un proxy inverso dirige el tráfico entrante a un servicio de backend.
  5. Configura el proxy de la siguiente manera:
    Nombre Valor
    Nombre del proxy helloworld_apikey
    Ruta base

    /helloapikey

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

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

    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!.

  6. Haz clic en Siguiente.
  7. Implementar (opcional). Deje estos campos en blanco.
  8. Haz clic en Crear.
  9. Apigee crea el nuevo proxy y muestra el resumen de los detalles del proxy en el panel Resumen del proxy.

Interfaz clásica

  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

Apigee en la consola de Cloud

  1. En el panel Resumen del proxy del proxy helloworld_apikey, haz clic en la pestaña Desarrollar.
  2. En el menú Políticas, haga clic en Añadir política.
  3. En el panel Crear política, en Seguridad, selecciona Verificar clave de API.
  4. En el panel Verificar clave de API, rellena los campos obligatorios de las secciones Nombre y Nombre visible con los siguientes valores:
    • Nombre: introduce un nombre de política. Por ejemplo, VerifyAPIKey.
    • Nombre visible: introduce el nombre de la política que se usará en la interfaz de usuario. Por ejemplo, Verify API Key.
  5. Haz clic en Crear.
  6. Haga clic en para añadir otra política.
  7. En el panel Crear política, en Mediación, selecciona Asignar mensaje.
  8. En el panel Asignar mensaje, rellena los campos obligatorios de las secciones Nombre y Nombre visible con los siguientes valores:
    • Nombre: introduce un nombre de política. Por ejemplo, AssignMessage.
    • Nombre visible: introduce el nombre de la política que se usará en la interfaz de usuario. Por ejemplo, Assign Message.
  9. Haz clic en Crear.
  10. El elemento <APIKey> del código XML que se muestra a continuación especifica la ubicación de la clave de API en la solicitud entrante. De forma predeterminada, la política obtiene la clave de un 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.

  11. Actualiza el contenido de la política Assign Message (Asignar mensaje) de la siguiente manera:
  12. <AssignMessage async="false" continueOnError="false" enabled="true" name="remove-query-param-apikey">
        <DisplayName>Remove Query Param apikey</DisplayName>
        <Remove>
            <QueryParams>
                <QueryParam name="apikey"/>
            </QueryParams>
        </Remove>
        <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
        <AssignTo createNew="false" transport="http" type="request"/>
    </AssignMessage>
  13. Añade las políticas VerifyApiKey y Remove Query Param apikey.
    1. En el menú Proxy endpoints (Endpoints de proxy), haz clic en Preflow (Preflow).
    2. En el panel Solicitud del editor visual, haz clic en Añadir paso de política.
    3. En el panel Añadir política, selecciona Verificar clave de API.
    4. Haz clic en Añadir.
    5. En el panel Solicitud del editor visual, haz clic en Añadir paso de política.
    6. En el panel Añadir política, seleccione Eliminar parámetro de consulta apikey.
    7. Haz clic en Añadir.
  14. Haz clic en Guardar.
  15. Despliega tu proxy en un entorno:
    1. Haz clic en Desplegar.
    2. Seleccione una Revisión y un Entorno.
    3. Haz clic en Desplegar.
  16. Para probar los cambios, llama a la API como se describe en Probar la API.

Interfaz clásica

  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 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.

Intentar 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 pasos siguientes, obtendrás la clave de API necesaria.

Añadir un producto de API

Apigee en la consola de Cloud

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

  1. En la Google Cloud consola, ve a la página Distribución > Productos de API:

    Ir a productos de API

  2. Haz clic en + Crear.
  3. Introduce los detalles del producto de tu 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 la 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 usa el valor Name. Este campo se rellena automáticamente con el valor 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, introduzca "/". Ignore 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.

Para obtener más información sobre cómo añadir un producto de API, consulte el artículo Crear un producto de API.

Interfaz clásica

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 la 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 podrás generar informes más detallados sobre el tráfico de las APIs por aplicación.

Crear un desarrollador

Apigee en la consola de Cloud

Para crear un desarrollador, sigue estos pasos:

  1. En la Google Cloud consola, ve a la página Distribución > Desarrolladores:

    Ir a Desarrolladores

  2. Haz clic en + Crear.
  3. En la ventana Añadir desarrollador, introduce lo siguiente:
    Campo Valor
    Nombre Keyser
    Apellidos Soze
    Correo electrónico keyser@example.com
    Username (Nombre de usuario) keyser
  4. Haz clic en Añadir.

Para obtener más información sobre cómo crear un desarrollador, consulta el artículo Registrar desarrolladores de aplicaciones.

Interfaz clásica

Para crear un desarrollador, sigue estos pasos:

  1. En el menú, seleccione 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

Apigee en la consola de Cloud

  1. En la Google Cloud consola, ve a la página Distribución > Aplicaciones:

    Ir a Aplicaciones

  2. Haz clic en + Crear.
  3. Introduce lo siguiente en la ventana Create App (Crear aplicación):
    Campo Valor
    Nombre de la aplicación Introduce: keyser_app
    Nombre visible Introduce: keyser_app
    Desarrolladores Seleccionar: Keyser Soze (keyser@example.com)
    URL de retrollamada Dejar en blanco
    Notas Dejar en blanco
  4. En la sección Credenciales, haz clic en Añadir credencial.
  5. Selecciona Nunca. Las credenciales de esta aplicación no caducarán nunca.
  6. Haga clic en Añadir productos.
  7. Selecciona el producto que acabas de crear.
  8. Haz clic en Añadir.
  9. Haz clic en Crear.

Para obtener más información sobre cómo registrar una aplicación, consulta el artículo Registrar una aplicación.

Interfaz clásica

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:
    Campo Valor
    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

Apigee en la consola de Cloud

Para obtener la clave de API, sigue estos pasos:

  1. En la consola Google Cloud , ve a la página Distribución > Aplicaciones.

    Ir a Aplicaciones

  2. Selecciona la aplicación que quieras de la lista.
  3. En la página Ver aplicación, en Credenciales, haz clic en junto al campo Clave. Ten en cuenta que la clave está asociada al producto que has creado.
  4. Haz clic en Copiar. Usarás esta clave en el siguiente paso.

Interfaz clásica

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 obtener 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.

Apigee en la consola de Cloud

  1. En la Google Cloud consola, ve a la página Desarrollo de proxy > Proxies de API.
  2. Ir a proxies de API

  3. Selecciona el proxy necesario en la lista de proxies.
  4. En la página Detalles del proxy, haz clic en Desarrollar.
  5. Modifica el XML de la política para que busque en el encabezado en lugar de en el parámetro de consulta:
  6. <APIKey ref="request.header.x-apikey"/>
  7. Haz clic en Guardar para guardar los cambios.
  8. Haz clic en Desplegar.
  9. Seleccione una Revisión y un Entorno.
  10. Haz clic en Desplegar.
  11. 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: YOUR_API_KEY" http://YOUR_ENV_GROUP_HOSTNAME/helloapikey

Ten en cuenta que, para completar el cambio, también deberás 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>

Interfaz clásica

  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 deberás 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 transferir 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.