Protege una API mediante la solicitud de claves de API

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

Consulta la documentación de Apigee Edge.

Video: Mira este breve video para obtener una introducción sobre cómo proteger tu API.

Qué aprenderás

En este instructivo se explica lo siguiente:

  • Cómo crear un proxy de API que requiera una clave de API.
  • Cómo crear un producto de API, un desarrollador y una app para desarrolladores.
  • Cómo llamar a tu API con una clave de API.

Es importante proteger tu API del acceso no autorizado. Una forma de hacerlo es con las claves de API.

Cuando una app realiza una solicitud a un proxy de API configurado para verificar una clave de API, la app debe proporcionar una clave válida. En el entorno de ejecución, la política Verificar clave de la API verifica que la clave de API proporcionada tenga las siguientes características:

  • Es válida.
  • No se revocó.
  • 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 generará una falla en la autorización.

Crea 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 los 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 (más común). Un proxy inverso enruta el tráfico entrante a un servicio de backend.
  5. Configura el proxy de la siguiente manera:
    Nombre Valor
    Proxy name helloworld_apikey
    Base Path

    /helloapikey

    La ruta de acceso base del proyecto es parte de la URL que se usa para realizar solicitudes al proxy de API.

    Descripción hello world protected by API key
    (API existente) de destino

    http://mocktarget.apigee.net

    Esto define la URL de destino que Apigee invoca en una solicitud al proxy de API. Este objetivo solo muestra una respuesta simple: Hello, Guest!.

  6. Haz clic en Siguiente.
  7. Implementa (opcional). Deja 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.

IU clásica

  1. Ve a la IU de Apigee y accede.
  2. Selecciona tu organización en el menú desplegable de la esquina superior izquierda de la IU.
  3. Haz clic en Desarrollar > Proxies de API para mostrar la lista de proxies de API.

  4. Haz clic en Crear nuevo.
    Botón para Crear proxy
  5. En el asistente para compilar un proxy, selecciona Proxy inverso (más común).
  6. Configura el proxy de la siguiente manera:
    En este campo haz lo siguiente Sigue estas recomendaciones
    Proxy name Ingresa: helloworld_apikey
    Ruta de acceso base del proyecto

    Cambia a: /helloapikey

    La ruta de acceso base del proyecto es parte de la URL que se usa para realizar solicitudes al proxy de API.

    Descripción Ingresa: hello world protected by API key
    (API existente) de destino

    Ingresa: http://mocktarget.apigee.net

    Esto define la URL de destino que Apigee invoca en una solicitud al proxy de API. Este objetivo solo muestra una respuesta simple: Hello, Guest!.

  7. Haz clic en Siguiente.
  8. En la página Políticas comunes, selecciona Clave de API. Con esta opción, se agregan automáticamente dos políticas a tu proxy de API y se crea un producto de API necesario para generar la clave de API.
  9. Haz clic en Siguiente.
  10. En la página Resumen, asegúrate de que esté 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.

Visualiza 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, haz clic en Agregar política.
  3. En el panel Crear política, en Seguridad, selecciona Verificar clave de API.
  4. En el panel Verificar clave de API, completa los campos obligatorios en las secciones Nombre y Nombre visible con los siguientes valores:
    • Nombre: Ingresa un nombre para la política. Por ejemplo, VerifyAPIKey
    • Nombre visible: Ingresa el nombre de la política para usarlo en la IU. Por ejemplo, Verify API Key
  5. Haz clic en Crear.
  6. Haz clic en para agregar otra política.
  7. En el panel Crear política, en Mediación, selecciona Asignar mensaje.
  8. En el panel Asignar mensaje, completa los campos obligatorios en las secciones Nombre y Nombre visible con los siguientes valores:
    • Nombre: Ingresa un nombre para la política. Por ejemplo, AssignMessage
    • Nombre visible: Ingresa el nombre de la política para usarlo en la IU. Por ejemplo, Assign Message
  9. Haz clic en Crear.
  10. El elemento <APIKey> en el siguiente código XML especifica la ubicación de la clave de API dentro de la solicitud entrante. De forma predeterminada, la política recupera 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 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. Agrega las políticas VerifyApiKey y Remove Query Param apikey.
    1. En el menú Proxy endpoints, haz clic en Preflow.
    2. En el panel Solicitud del editor visual, haz clic en Agregar paso de política.
    3. En el panel Agregar paso de la política, selecciona Verificar clave de API.
    4. Haz clic en Agregar.
    5. En el panel Solicitud del editor visual, haz clic en Agregar paso de política.
    6. En el panel Agregar paso de la política, selecciona Remove Query Param apikey.
    7. Haz clic en Agregar.
  14. Haz clic en Guardar.
  15. Implementa tu proxy en un entorno:
    1. Haz clic en Implementar.
    2. Selecciona una revisión y un entorno.
    3. Haz clic en Implementar.
  16. Para probar los cambios, llama a la API como se describe en Intenta llamar a la API.

IU clásica

  1. En el editor de proxy de API haga clic en la pestaña Desarrollar. Verás que se agregaron dos políticas al flujo de solicitudes del proxy de API:
    • Verificar clave de API: verifica la llamada a la API para garantizar que esté presente una clave de API válida (enviada como parámetro de consulta).
    • Quitar la clave de API del parámetro de consulta: una política de asignación de mensaje que quita la clave de API después de que se verifica, de modo que no se pase y exponga de forma innecesaria.
  2. Haz clic en el ícono de la política de verificación de la clave de API en la vista de flujo y observa la configuración de 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 un parámetro de búsqueda 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, realizarás una llamada a la API exitosa directamente al servicio de destino y, luego, realizarás una llamada no exitosa al proxy de la API para ver cómo lo protegen las políticas.

  1. Listo

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

    http://mocktarget.apigee.net

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

  2. Falla

    Ahora, intenta llamar a tu proxy de API:

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

    En el ejemplo anterior, YOUR ENV_GROUP_HOSTNAME es el nombre de host del grupo de entornos. Consulta Encuentra el nombre de host del grupo de entornos.

    Sin la política Verificar clave de API, esta llamada te dará la misma respuesta que la llamada anterior. Pero, en este caso, deberías obtener la siguiente respuesta de error:

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

    Esto significa que, de manera correcta, no mostró una clave de API válida (como parámetro de consulta).

En los próximos pasos, obtendrás la clave de API necesaria.

Agrega un producto de API

Apigee en la consola de Cloud

Para agregar un producto de API mediante la IU 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. Ingresa los detalles del producto para el 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 crea el producto de API.
    Nombre visible Nombre visible del producto de API. El nombre visible se usa en la IU y se puede editar en cualquier momento. Si no se especifica, se usa el valor de Name. Este campo se completa automáticamente con el valor de Nombre. Puedes editar o borrar su contenido. El nombre visible puede incluir caracteres especiales.
    Descripción Descripción del producto de API.
    Entorno Entornos a los que el producto de API permitirá el acceso Por ejemplo, test o prod.
    Acceso Selecciona Público.
    Aprueba de manera automática las solicitudes de acceso Habilita la aprobación automática de solicitudes clave para este producto de API desde cualquier aplicación.
    Cuota Ignora este instructivo.
    Permisos de OAuth permitidos Ignora este instructivo.
  4. En la sección Operaciones, haz clic en Agregar una operación.
  5. En el campo Proxy de API, selecciona el proxy de API que acabas de crear.
  6. En el campo Ruta de acceso, ingresa “/”. Ignora los otros campos.
  7. Haz clic en Guardar para guardar la operación.
  8. Haz clic en Save para guardar el producto de API.

Si deseas obtener más información para agregar un producto de API, consulta Crea un producto de API.

IU clásica

Para agregar un producto de API mediante la IU de Apigee, sigue estos pasos:

  1. Selecciona Publicar > Productos de API.
  2. Haz clic en +Crear.
  3. Ingresa los detalles del producto para el 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 crea el producto de API.
    Nombre visible Nombre visible del producto de API. El nombre visible se usa en la IU y se puede editar en cualquier momento. Si no se especifica, se usará el valor Nombre. Este campo se completa automáticamente con el valor Nombre. Puedes editar o borrar tu contenido. El nombre visible puede incluir caracteres especiales.
    Descripción Descripción del producto de API.
    Entorno Entornos a los que el producto de API permitirá el acceso Por ejemplo, test o prod.
    Acceso Selecciona Público.
    Aprueba de manera automática las solicitudes de acceso Habilita la aprobación automática de solicitudes clave para este producto de API desde cualquier aplicación.
    Cuota Ignora este instructivo.
    Permisos de OAuth permitidos Ignora este instructivo.
  4. En la sección Operaciones, haz clic en AGREGAR UNA OPERACIÓN.
  5. En el campo Proxy de API, selecciona el proxy de API que acabas de crear.
  6. En el campo Ruta, ingresa “/”. Ignora los otros campos.
  7. Haz clic en Guardar para guardar la operación.
  8. Haz clic en Save para guardar el producto de API.

Agrega un desarrollador y una app a tu organización

A continuación, simularemos el flujo de trabajo de un desarrollador que se registra para usar tus API. Un desarrollador tendrá una o más apps que llaman a tus API y cada app obtiene una clave de API única. Esto te permite, como proveedor de API, tener un control más detallado sobre el acceso a tus API y, así, obtener informes más detallados sobre el tráfico de API por app.

Cree un desarrollador

Apigee en la consola de Cloud

Para crear un desarrollador, haz lo siguiente:

  1. En la consola de Google Cloud , ve a la página Distribution > Developers:

    Ir a Developers

  2. Haz clic en + Crear.
  3. En la ventana Agregar desarrollador, ingresa lo siguiente:
    Campo Valor
    Nombre Keyser
    Apellido Soze
    Correo electrónico keyser@example.com
    Nombre de usuario keyser
  4. Haz clic en Agregar.

Para obtener más información sobre cómo crear un desarrollador, consulta Registra desarrolladores de apps.

IU clásica

Para crear un desarrollador, haz lo siguiente:

  1. Selecciona Publicar > Desarrolladores en el menú.
    Nota: Si todavía estás en la pantalla de desarrollo, haz clic en "<", de DEVELOP, para mostrar el menú y selecciona Publicar > Desarrolladores.
  2. Haz clic en + Desarrollador.
  3. En la ventana Nuevo desarrollador, ingrese lo siguiente:
    En este campo haz lo siguiente intro
    Nombre Keyser
    Apellido Soze
    Nombre de usuario keyser
    Correo electrónico keyser@example.com
  4. Haz clic en Crear.

Registra una aplicación

Apigee en la consola de Cloud

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

    Ve a Apps.

  2. Haz clic en + Crear.
  3. En la ventana Create App, ingresa lo siguiente:
    Campo Valor
    Nombre de la app Ingresa: keyser_app
    Nombre visible Ingresa: keyser_app
    Desarrollador Selecciona: Keyser Soze (keyser@example.com)
    URL de devolución de llamada Déjelo en blanco
    Notas Déjelo en blanco
  4. En la sección Credenciales, haz clic en Agregar credencial.
  5. Selecciona Nunca. Las credenciales para esta app no expirarán nunca.
  6. Haz clic en Agregar productos.
  7. Seleccione el producto que acabas de crear.
  8. Haz clic en Agregar.
  9. Haz clic en Crear.

Para obtener más información sobre el registro de una app, consulta Cómo registrar una app.

IU clásica

Para registrar una app de desarrollador, sigue estos pasos:

  1. Selecciona Publicar > Apps.
  2. Haga clic en + Aplicación.
  3. En la ventana Nueva aplicación de desarrollador, ingrese lo siguiente:
    Campo Valor
    Nombre y Nombre visible Ingresa: keyser_app
    Desarrollador Selecciona: Keyser Soze (keyser@example.com)
    URL de devolución de llamada y Notas Déjelo en blanco
  4. En la sección Credenciales, selecciona Nunca. Las credenciales para esta app no expirarán nunca.
  5. Haz clic en Agregar producto.
  6. Seleccione el producto que acabas de crear.
  7. Haz clic en Crear.

Obtenga la clave de API

Apigee en la consola de Cloud

Para obtener la clave de API, sigue estos pasos:

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

    Ve a Apps.

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

IU clásica

Para obtener la clave de API, sigue estos pasos:

  1. En la página Apps (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. Ten en cuenta que la clave está asociada al producto que creaste.
  3. Selecciona y copia la clave. La necesitarás en el próximo paso.

Llama a la API con una clave

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

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

Ahora, cuando llames al proxy de API, deberías obtener la siguiente respuesta: Hello, Guest!

¡Felicitaciones! Creaste un proxy de API que está protegido mediante el requisito de que se incluya una clave de API válida en la llamada.

Ten en cuenta que, en general, no se recomienda pasar una clave de API como parámetro de búsqueda. Deberías considerar pasarlo en el encabezado HTTP en su lugar.

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

En este paso, modificarás el proxy para buscar 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 los proxies de API

  3. Selecciona el proxy requerido de la lista.
  4. En la página Detalles del proxy, haz clic en Desarrollar.
  5. Modifica el XML de la política para que le indique 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 Implementar.
  9. Selecciona una revisión y un entorno.
  10. Haz clic en Implementar.
  11. Realiza la siguiente llamada a la API con cURL para pasar la clave de API como un encabezado llamado x-apikey. No olvides sustituir el nombre de su organización.

    curl -v -H "x-apikey: YOUR_API_KEY" http://YOUR_ENV_GROUP_HOSTNAME/helloapikey

Ten en cuenta que, para completar por completo el cambio, también deberás configurar la política Asignar mensaje a fin de quitar el encabezado, en lugar del parámetro de búsqueda. Por ejemplo:

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

IU clásica

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

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

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

Ten en cuenta que, para completar por completo el cambio, también deberás configurar la política Asignar mensaje a fin de quitar el encabezado, en lugar del parámetro de búsqueda. 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 API a menudo implica seguridad adicional, como OAuth, un protocolo abierto que intercambia credenciales (como nombre de usuario y contraseña) por tokens de acceso. Los tokens de acceso son strings aleatorias largas que se pueden pasar mediante una canalización de mensajes, incluido de una app a otra, sin comprometer las credenciales originales.

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