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.
Selecciona tu organización en el menú desplegable de la esquina superior izquierda de la interfaz de usuario.
Haz clic en Desarrollo > Proxies de APIs para ver la lista de proxies de APIs.
Haz clic en Crear.
En el asistente para crear un proxy, selecciona Proxy inverso (el más habitual).
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!.
Haz clic en Siguiente.
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.
Haz clic en Siguiente.
En la página Resumen, comprueba que se haya seleccionado un entorno de implementación y haz clic en Crear e implementar.
Haz clic en Editar proxy para mostrar la página de descripción general del proxy de API.
Ver las políticas
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.
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.
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!
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:
Selecciona Publicar > Productos de API.
Haz clic en Crear.
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.
En la sección Operaciones, haz clic en AÑADIR UNA OPERACIÓN.
En el campo Proxy de API, selecciona el proxy de API que acabas de crear.
En el campo Ruta, introduce "/". Ignora los demás campos.
Haz clic en Guardar para guardar la operación.
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:
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.
Haz clic en + Desarrollador.
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
Haz clic en Crear.
Registrar una aplicación
Para registrar una aplicación de desarrollador, sigue estos pasos:
Selecciona Publicar > Aplicaciones.
Haz clic en + Aplicación.
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
En la sección Credenciales, selecciona Nunca.
Las credenciales de esta aplicación no caducarán nunca.
Haga clic en Añadir producto.
Selecciona el producto que acabas de crear.
Haz clic en Crear.
Obtener la clave de API
Para obtener la clave de API, sigue estos pasos:
En la página Aplicaciones (Publicar > Aplicaciones), haz clic en keyser_app.
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.
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.
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.
Edita el proxy de API. Selecciona Desarrollar > Proxies de API >
helloworld_apikey y ve a la vista Desarrollar.
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"/>
Guarda el proxy de API y usa Desplegar para desplegarlo.
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.
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:
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.
[[["Es fácil de entender","easyToUnderstand","thumb-up"],["Me ofreció una solución al problema","solvedMyProblem","thumb-up"],["Otro","otherUp","thumb-up"]],[["Es difícil de entender","hardToUnderstand","thumb-down"],["La información o el código de muestra no son correctos","incorrectInformationOrSampleCode","thumb-down"],["Me faltan las muestras o la información que necesito","missingTheInformationSamplesINeed","thumb-down"],["Problema de traducción","translationIssue","thumb-down"],["Otro","otherDown","thumb-down"]],["Última actualización: 2025-09-04 (UTC)."],[[["\u003cp\u003eThis guide demonstrates how to secure APIs in Apigee and Apigee hybrid using API keys to prevent unauthorized access.\u003c/p\u003e\n"],["\u003cp\u003eThe tutorial walks through the process of creating an API proxy, configuring it to require API keys, and setting up policies to verify and remove the API key.\u003c/p\u003e\n"],["\u003cp\u003eIt explains how to create API products, developers, and developer apps, which are needed to generate API keys for accessing the protected API proxy.\u003c/p\u003e\n"],["\u003cp\u003eThe document illustrates how to test the API proxy by making calls with and without a valid API key, showcasing the security enforcement.\u003c/p\u003e\n"],["\u003cp\u003eIt highlights the best practice of passing API keys in the HTTP header (x-apikey) instead of as a query parameter for enhanced security, and details the required modifications to the API proxy.\u003c/p\u003e\n"]]],[],null,["# Secure an API by requiring API keys\n\n*This page\napplies to **Apigee** and **Apigee hybrid**.*\n\n\n*View [Apigee Edge](https://docs.apigee.com/api-platform/get-started/what-apigee-edge) documentation.*\n\n| **Note:** This video was recorded with a previous version of the Apigee UI; however, the concepts are still valid.\n\n\n**Video:** Check out this short video for an introduction on securing your API. \n**What you'll learn**\n\nThis tutorial explains how to:\n\n- Create an API proxy that requires an API key.\n- Create an API product, a developer, and a developer app.\n- Call your API with an API key. \nIt's important to protect your API from unauthorized access. One way to do that is with\nAPI keys.\n\nWhen an app makes a request to an API proxy that is configured to verify an API\nkey, the app must supply a valid key. At runtime, the\nVerify API Key policy checks that the supplied API key:\n\n- Is valid\n- Hasn't been revoked\n- Matches the API key for the API product that exposes the requested resources\n\nIf the key is valid, the request is allowed. If the key is invalid, the request results in\nan authorization failure. \n\nCreate the API proxy\n--------------------\n\n1. Go to the [Apigee UI](https://apigee.google.com) and sign in.\n2. Select your organization using the drop-down menu in the upper left corner of the UI.\n3. Click **Develop \\\u003e API Proxies** to display the API\n proxies list.\n\n4. Click **Create New** . \n5. In the Build a Proxy wizard, select **Reverse proxy (most common)**.\n6. Configure the proxy as follows: \n\n7. Click **Next**.\n8. On the **Common policies** page, select **API Key**. This option automatically adds two policies to your API proxy and creates an API product needed for generating the API key.\n9. Click **Next**.\n10. On the Summary page, make sure a deployment environment is selected, and click **Create and deploy**.\n11. Click **Edit proxy** to display the Overview page for the API proxy. \n\nView the policies\n-----------------\n\n1. In the API proxy editor, click the **Develop** tab. You'll see that two policies have been added to the request flow of the API proxy:\n - **Verify API Key** -- Checks the API call to make sure a valid API key is present (sent as a query parameter).\n - **Remove Query Param apikey** -- An Assign Message policy that removes the API key after it's checked, so that it doesn't get passed around and exposed unnecessarily.\n2. Click the Verify API Key policy icon in the flow view, and look at the policy's XML\n configuration in the lower code view. The `\u003cAPIKey\u003e` element tells the\n policy where it should look for the API key when the call is made. By default, it looks\n for the key as a query parameter called `apikey` in the HTTP request:\n\n ```text\n \u003cAPIKey ref=\"request.queryparam.apikey\" /\u003e\n ```\n\n The name `apikey` is arbitrary and can be any property that contains the\nAPI key. \n\nTry to call the API\n-------------------\n\nIn this step, you'll make a successful API call directly to the target service, then\nyou'll make an unsuccessful call to the API proxy to see how it's being protected by the\npolicies.\n\n1. **Success**\n\n In a web browser, go to the following address. This is the target service that the API\n proxy is configured to forward the request to, but you'll hit it directly for now: \n\n ```text\n http://mocktarget.apigee.net\n ```\n\n You should get this successful response: `Hello, Guest!`\n2. **Failure**\n\n Now try to call your API proxy: \n\n ```\n curl -v -k https://YOUR_ENV_GROUP_HOSTNAME/helloapikey\n ```\n\n where \u003cvar translate=\"no\"\u003eYOUR ENV_GROUP_HOSTNAME\u003c/var\u003e is the environment group hostname. See\n [Find the environment group hostname](/apigee/docs/api-platform/get-started/test-proxy#find-the-environment-group-hostname).\n | **Note:** If you have trouble calling the proxy, you may need to add the `Host` header, as described in [Deploy a sample proxy](/apigee/docs/api-platform/get-started/deploy-sample).\n\n Without the Verify API Key policy, this call would give you the same response as the\n previous call. But in this case, you should get the following error response: \n\n ```gdscript\n {\"fault\":{\"faultstring\":\"Failed to resolve API Key variable request.queryparam.apikey\",\"detail\":{\"errorcode\":\"steps.oauth.v2.FailedToResolveAPIKey\"}}}\n ```\n\n which means, correctly, that you didn't pass a valid API key (as a query\n parameter).\n\nIn the next steps, you'll get the required API key. \n\nAdding an API product\n---------------------\n\nTo add an API product using the Apigee UI:\n\n1. Select **Publish \\\u003e API Products**.\n2. Click **+Create**.\n3. Enter the Product Details for your API product. \n\n4. In the **Operations** section, click **ADD AN OPERATION**.\n5. In the API Proxy field, select the API proxy you just created.\n6. In the Path field, enter \"/\". Ignore the other fields.\n7. Click **Save** to save the Operation.\n8. Click **Save** to save the API product. \n\nAdd a developer and app to your\norganization\n--------------------------------------------\n\nNext, we're going to simulate the workflow of a developer signing up to use your APIs. A\ndeveloper will have one or more apps that call your APIs, and each app gets a unique API key.\nThis gives you, the API provider, more granular control over access to your APIs and more\ngranular reporting on API traffic by app.\n\n### Create a developer\n\nTo create a developer:\n\n1. Select **Publish \\\u003e Developers** in the menu. \n **Note** : If you are still in the Develop screen, click on the **\"\\\u003c\"** by **DEVELOP** to display the menu and select **Publish \\\u003e Developers**\n2. Click **+ Developer**.\n3. Enter the following in the New Developer window: \n\n4. Click **Create**.\n\n### Register an app\n\nTo register a developer app:\n\n1. Select **Publish \\\u003e Apps**.\n2. Click **+ App**.\n3. Enter the following in the New Developer App window: \n\n4. In the Credentials section, select **Never**. The credentials for this app will never expire.\n5. Click **Add product**.\n6. Select the product you just created.\n7. Click **Create**.\n\n### Get the API key\n\nTo get the API key:\n\n1. On the Apps page (Publish \\\u003e Apps), click **keyser_app**.\n2. On the **keyser_app** page, click **Show** next to **Key** in the **Credentials** section. Notice that the key is associated with the product you created. \n3. Select and copy the key. You'll use it in the next step. \n\nCall the API with a key\n-----------------------\n\nNow that you have an API key, you can use it to call the API proxy. Paste the API key as\nshown, as a query parameter. Make sure there are no extra\nspaces in the query parameter. \n\n```\ncurl -v -k https://YOUR_ENV_GROUP_HOSTNAME/helloapikey?apikey=your_api_key\n```\n\nNow when you call the API proxy, you should get this response: `Hello,\nGuest!`\n\nCongratulations! You've created an API proxy and protected it by requiring that a valid\nAPI key be included in the call.\n\nNote that in general it's not good practice to pass an API key as a query parameter. You\nshould consider [passing it in the HTTP\nheader instead](#extracreditpassingthekeyinthehttpheader). \n\nBest practice: Passing the key in the HTTP\nheader\n-------------------------------------------------\n\n| **Note:** It's a good practice to pass the API key in a header rather than in a query parameter. Query parameters appear in the browser history and network logs, which could present a security risk. Headers do not appear in the browser history and network logs.\n\nIn this step, you will modify the proxy to look for the API key in a header called `x-apikey`.\n\n1. Edit the API proxy. Select **Develop \\\u003e API Proxies \\\u003e\n helloworld_apikey** , and go to the **Develop** view.\n2. Select the **Verify API Key** policy, and modify the policy XML to tell\n the policy to look in the `header` rather than in the\n `queryparam`:\n\n ```text\n \u003cAPIKey ref=\"request.header.x-apikey\"/\u003e\n ```\n3. **Save** the API proxy and use **Deploy** to deploy it.\n4. Make the following API call using cURL to pass the API key as a header called\n `x-apikey`. Don't forget to substitute your organization name.\n\n ```scdoc\n curl -v -H \"x-apikey: {api_key_goes_here}\" http://YOUR_ENV_GROUP_HOSTNAME/helloapikey\n ```\n\nNote that to fully complete the change, you'd also need to configure the Assign Message\npolicy to remove the header instead of the query parameter. For example: \n\n```\n\u003cRemove\u003e\n \u003cHeaders\u003e\n \u003cHeader name=\"x-apikey\"/\u003e\n \u003c/Headers\u003e\n\u003c/Remove\u003e\n```\n| **Note:** You could also pass the API key as a form parameter. If you did, the Verify API Key policy would be configured like this: \n|\n| ```scdoc\n| \u003cAPIKey ref=\"request.formparam.{api_key_goes_here}\"/\u003e\n``` \n\nRelated topics\n--------------\n\nHere are some topics related to API products and keys:\n\n- [Managing API products](/apigee/docs/api-platform/publish/create-api-products)\n- [API keys](/apigee/docs/api-platform/security/api-keys)\n- [Registering app\n developers](/apigee/docs/api-platform/publish/adding-developers-your-api-product)\n- [Register apps and\n manage API keys](/apigee/docs/api-platform/publish/creating-apps-surface-your-api)\n- [Verify API Key\n policy](/apigee/docs/api-platform/reference/policies/verify-api-key-policy)\n\nAPI protection often involves additional security such as [OAuth](/apigee/docs/api-platform/security/oauth/oauth-home), an\nopen protocol that exchanges credentials (like username and password) for\naccess tokens. Access tokens are long, random strings that can be passed through a message\npipeline, including from app to app, without compromising the original credentials.\n\nFor an overview of security-related topics, see\n[Securing a proxy](https://cloud.google.com/apigee/docs/api-platform/security/api-security)."]]