Protección de las API mediante suscripciones
Al publicar las API mediante API Management, es sencillo y frecuente proteger el acceso a ellas mediante claves de suscripción. Los desarrolladores que necesiten usar las API publicadas deben incluir una clave de suscripción válida en las solicitudes HTTP al realizar llamadas a esas API. De lo contrario, la puerta de enlace de API Management rechaza las llamadas inmediatamente. No se reenvían a los servicios back-end.
Para obtener una clave de suscripción para acceder a las API se necesita una suscripción. Una suscripción es básicamente un contenedor con nombre para un par de claves de suscripción. Los desarrolladores que necesiten usar las API publicadas pueden obtener suscripciones. Y no necesitan aprobación de los publicadores de API. Los publicadores de API también pueden crear suscripciones directamente para los consumidores de API.
Nota:
API Management también admite otros mecanismos para proteger el acceso a las API, como OAuth2.0, certificados de cliente y lista de permitidos de IP.
Suscripciones y claves
Una clave de suscripción es una cadena única generada de forma automática que se puede pasar en los encabezados de la solicitud de cliente o como un parámetro de cadena de consulta. La clave está directamente relacionada con una suscripción, que puede tener diferentes áreas como ámbito. Las suscripciones proporcionan un control detallado sobre los permisos y las directivas.
Los tres ámbitos de suscripción principales son:
Ámbito | Detalles |
---|---|
Todas las API | Se aplica a todas las API accesibles desde la puerta de enlace. |
Una sola API | Este ámbito se aplica a una sola API importada y a todos sus puntos de conexión. |
Producto | Un producto es una colección de una o varias API que se configuran en API Management. Se pueden asignar API a más de un producto. Los productos pueden tener diferentes reglas de acceso, cuotas de uso y condiciones de uso. |
Las aplicaciones que llaman a una API protegida deben incluir la clave en todas las solicitudes.
Estas claves de suscripción se pueden volver a generar en cualquier momento, por ejemplo, si sospecha que una clave se ha compartido con usuarios no autorizados.
Cada suscripción tiene dos claves, una principal y una secundaria. Tener dos claves facilita la regeneración de una clave. Por ejemplo, si quiere cambiar la clave principal y evitar tiempo de inactividad, use la clave secundaria en las aplicaciones.
En el caso de los productos con suscripciones habilitadas, los clientes deben proporcionar una clave cuando realicen llamadas a API en ese producto. Los desarrolladores pueden obtener una clave mediante el envío de una solicitud de suscripción. Si aprueba la solicitud, debe enviarles la clave de suscripción de forma segura, por ejemplo, en un mensaje cifrado. Este paso es una parte fundamental del flujo de trabajo de API Management.
Llamada a una API con la clave de suscripción
Las aplicaciones deben incluir una clave válida en todas las solicitudes HTTP cuando realizan llamadas a puntos de conexión de API que están protegidos por una suscripción. Las claves se pueden pasar en el encabezado de solicitud o como una cadena de consulta en la dirección URL.
El nombre de encabezado predeterminado es Ocp-Apim-Subscription-Key y la cadena de consulta predeterminada es subscription-key.
Para probar las llamadas API, puede usar el portal para desarrolladores o herramientas de línea de comandos, como curl. Este es un ejemplo de una solicitud GET
mediante el portal para desarrolladores, en la que se muestra el encabezado de clave de suscripción:
Esta es la forma de pasar una clave en el encabezado de solicitud con curl:
curl --header "Ocp-Apim-Subscription-Key: <key string>" https://<apim gateway>.azure-api.net/api/path
Este es un comando curl de ejemplo que pasa una clave en la dirección URL como una cadena de consulta:
curl https://<apim gateway>.azure-api.net/api/path?subscription-key=<key string>
Si la clave no se pasa en el encabezado, o como una cadena de consulta en la dirección URL, obtendrá una respuesta 401 Acceso denegado de la puerta de enlace de API.