Detección de API de sombra mediante el proxy de desarrollo
Con el Centro de API de Azure se catalogarán las API que se usan en la organización. Esto le permite saber qué API usa, dónde se encuentra la API en su ciclo de vida y con quién debe ponerse en contacto si hay problemas. En resumen, tener un catálogo actualizado de API le ayuda a mejorar la gobernanza, el cumplimiento y la posición de seguridad.
Al compilar la aplicación, especialmente si va a integrar nuevos escenarios, es posible que use API que no estén registradas en el Centro de API de Azure. Estas API se denominan API ocultas. Las API ocultas son API que no están registradas en la organización. Pueden ser API que aún no están registradas o podrían ser API que no están diseñadas para usarse en la organización.
Una manera de comprobar las API ocultas es con Dev Proxy. Dev Proxy es un simulador de API que intercepta y analiza las solicitudes de API de las aplicaciones. Una característica de Dev Proxy consiste en comprobar si las solicitudes de API interceptadas pertenecen a las API registradas en el Centro de API.
Antes de comenzar
Para detectar las API ocultas, debe tener una instancia del Centro de API de Azure con información sobre las API que usa en su organización. Si aún no ha creado uno, consulte Inicio rápido: Creación del centro de API. Además, debe instalar Dev Proxy.
Copia de la información del Centro de API
En la página Información general de la instancia del Centro de API de Azure, copie el nombre de la instancia del Centro de API, el nombre del grupo de recursos y el identificador de suscripción. Necesita esta información para configurar el ApiCenterOnboardingPlugin
de Dev Proxy para que pueda conectarse a la instancia del Centro de API de Azure.
Configuración de Dev Proxy
Para comprobar si la aplicación usa las API ocultas, debe habilitar el ApiCenterOnboardingPlugin
en el archivo de configuración de Dev Proxy. Para crear un informe de las API que usa la aplicación, agregue un informador.
Habilitación del ApiCenterOnboardingPlugin
En el archivo devproxyrc.json
, agregue la siguiente configuración:
{
"$schema": "https://raw.githubusercontent.com/microsoft/dev-proxy/main/schemas/v0.19.0/rc.schema.json",
"plugins": [
{
"name": "ApiCenterOnboardingPlugin",
"enabled": true,
"pluginPath": "~appFolder/plugins/dev-proxy-plugins.dll",
"configSection": "apiCenterOnboardingPlugin"
}
],
"urlsToWatch": [
"https://jsonplaceholder.typicode.com/*"
],
"apiCenterOnboardingPlugin": {
"subscriptionId": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
"resourceGroupName": "demo",
"serviceName": "contoso-api-center",
"workspaceName": "default",
"createApicEntryForNewApis": false
}
}
En las propiedades subscriptionId
, resourceGroupName
y serviceName
, proporcione la información sobre la instancia del Centro de API de Azure.
En la propiedad urlsToWatch
, especifique las direcciones URL que usa la aplicación.
Sugerencia
Use la extensión de Visual Studio Code del kit de herramientas de Dev Proxy para administrar fácilmente la configuración de Dev Proxy.
Adición de un informador
El ApiCenterOnboardingPlugin
genera un informe de las API que usa la aplicación. Para ver este informe, agregue un informador al archivo de configuración de Dev Proxy. Dev Proxy ofrece varios informadores. En este ejemplo, usará el informador de texto sin formato.
Actualice el archivo devproxyrc.json
con una referencia al informador de texto sin formato:
{
"$schema": "https://raw.githubusercontent.com/microsoft/dev-proxy/main/schemas/v0.19.0/rc.schema.json",
"plugins": [
{
"name": "ApiCenterOnboardingPlugin",
"enabled": true,
"pluginPath": "~appFolder/plugins/dev-proxy-plugins.dll",
"configSection": "apiCenterOnboardingPlugin"
},
{
"name": "PlainTextReporter",
"enabled": true,
"pluginPath": "~appFolder/plugins/dev-proxy-plugins.dll"
}
],
"urlsToWatch": [
"https://jsonplaceholder.typicode.com/*"
],
"apiCenterOnboardingPlugin": {
"subscriptionId": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
"resourceGroupName": "demo",
"serviceName": "contoso-api-center",
"workspaceName": "default",
"createApicEntryForNewApis": false
}
}
Comprobación de si la aplicación usa API ocultas
Para comprobar si la aplicación usa API ocultas, conéctese a su suscripción de Azure, ejecute Dev Proxy y deje que intercepte las solicitudes de API de la aplicación. Después, Dev Proxy compara la información sobre las solicitudes de API con la información del Centro de API de Azure e informa sobre las API que no están registradas en el Centro de API.
Conexión a su suscripción de Azure
Dev Proxy usa información del Centro de API de Azure para determinar si la aplicación usa las API ocultas. Para obtener esta información, necesita una conexión a la suscripción de Azure. Puede conectarse a la suscripción de Azure de varias maneras.
Ejecución de Dev Proxy
Después de conectarse a la suscripción de Azure, inicie Dev Proxy. Si inicia Dev Proxy desde la misma carpeta donde se encuentra el archivo devproxyrc.json
, se carga automáticamente la configuración. De lo contrario, especifique la ruta de acceso al archivo de configuración mediante la opción --config-file
.
Cuando se inicia Dev Proxy, comprueba que puede conectarse a la suscripción de Azure. Cuando la conexión se realiza correctamente, verá un mensaje similar al siguiente:
info Plugin ApiCenterOnboardingPlugin connecting to Azure...
info Listening on 127.0.0.1:8000...
Hotkeys: issue (w)eb request, (r)ecord, (s)top recording, (c)lear screen
Press CTRL+C to stop Dev Proxy
Presione r para iniciar la grabación de solicitudes de API desde la aplicación.
Uso de la aplicación
Use la aplicación como lo haría normalmente. Dev Proxy intercepta las solicitudes de API y almacena información sobre ellas en la memoria. En la línea de comandos donde se ejecuta Dev Proxy, debería ver información sobre las solicitudes de API que realiza la aplicación.
info Plugin ApiCenterOnboardingPlugin connecting to Azure...
info Listening on 127.0.0.1:8000...
Hotkeys: issue (w)eb request, (r)ecord, (s)top recording, (c)lear screen
Press CTRL+C to stop Dev Proxy
◉ Recording...
req ╭ GET https://jsonplaceholder.typicode.com/posts
api ╰ Passed through
req ╭ DELETE https://jsonplaceholder.typicode.com/posts/1
api ╰ Passed through
Comprobación de las API ocultas
Detenga la grabación presionando s. Dev Proxy se conecta a la instancia del Centro de API y compara la información sobre las solicitudes con la información del Centro de API.
info Plugin ApiCenterOnboardingPlugin connecting to Azure...
info Listening on 127.0.0.1:8000...
Hotkeys: issue (w)eb request, (r)ecord, (s)top recording, (c)lear screen
Press CTRL+C to stop Dev Proxy
◉ Recording...
req ╭ GET https://jsonplaceholder.typicode.com/posts
api ╰ Passed through
req ╭ DELETE https://jsonplaceholder.typicode.com/posts/1
api ╰ Passed through
○ Stopped recording
info Checking if recorded API requests belong to APIs in API Center...
info Loading APIs from API Center...
info Loading API definitions from API Center...
Cuando Dev Proxy finaliza su análisis, crea un informe en un archivo denominado ApiCenterOnboardingPlugin_PlainTextReporter.txt
con el siguiente contenido:
New APIs that aren't registered in Azure API Center:
https://jsonplaceholder.typicode.com:
DELETE https://jsonplaceholder.typicode.com/posts/1
APIs that are already registered in Azure API Center:
GET https://jsonplaceholder.typicode.com/posts
Incorporación automática de las API ocultas
El ApiCenterOnboardingPlugin
no solo puede detectar API ocultas, sino también incorporarlas automáticamente al Centro de API. Para incorporar automáticamente las API ocultas, en el archivo de configuración de Dev Proxy, actualice el createApicEntryForNewApis
a true
.
{
"$schema": "https://raw.githubusercontent.com/microsoft/dev-proxy/main/schemas/v0.19.0/rc.schema.json",
"plugins": [
{
"name": "ApiCenterOnboardingPlugin",
"enabled": true,
"pluginPath": "~appFolder/plugins/dev-proxy-plugins.dll",
"configSection": "apiCenterOnboardingPlugin"
},
{
"name": "PlainTextReporter",
"enabled": true,
"pluginPath": "~appFolder/plugins/dev-proxy-plugins.dll"
}
],
"urlsToWatch": [
"https://jsonplaceholder.typicode.com/*"
],
"apiCenterOnboardingPlugin": {
"subscriptionId": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
"resourceGroupName": "demo",
"serviceName": "contoso-api-center",
"workspaceName": "default",
"createApicEntryForNewApis": true
}
}
Al ejecutar Dev Proxy con el createApicEntryForNewApis
establecido en true
, crea automáticamente nuevas entradas de API en el Centro de API de Azure para las API ocultas que detecta.
Incorporación automática de las API ocultas con la especificación de OpenAPI
Al elegir incorporar automáticamente las API ocultas al Centro de API, puede hacer que Dev Proxy genere la especificación de OpenAPI para la API. La incorporación de API con especificaciones de OpenAPI acelera la incorporación de puntos de conexión que faltan y proporciona la información necesaria sobre la API. Cuando el ApiCenterOnboardingPlugin
detecta que Dev Proxy ha creado una nueva especificación de OpenAPI, la asocia a la API correspondiente en el Centro de API.
Para generar automáticamente especificaciones de OpenAPI para las API incorporadas, actualice la configuración de Dev Proxy para incluir el OpenApiSpecGeneratorPlugin
.
{
"$schema": "https://raw.githubusercontent.com/microsoft/dev-proxy/main/schemas/v0.19.0/rc.schema.json",
"plugins": [
{
"name": "OpenApiSpecGeneratorPlugin",
"enabled": true,
"pluginPath": "~appFolder/plugins/dev-proxy-plugins.dll"
},
{
"name": "ApiCenterOnboardingPlugin",
"enabled": true,
"pluginPath": "~appFolder/plugins/dev-proxy-plugins.dll",
"configSection": "apiCenterOnboardingPlugin"
},
{
"name": "PlainTextReporter",
"enabled": true,
"pluginPath": "~appFolder/plugins/dev-proxy-plugins.dll"
}
],
"urlsToWatch": [
"https://jsonplaceholder.typicode.com/*"
],
"apiCenterOnboardingPlugin": {
"subscriptionId": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
"resourceGroupName": "demo",
"serviceName": "contoso-api-center",
"workspaceName": "default",
"createApicEntryForNewApis": true
}
}
Importante
Dev Proxy ejecuta complementos en el orden en que se registran en la configuración. Primero debe registrar el OpenApiSpecGeneratorPlugin
para que pueda crear especificaciones de OpenAPI antes de que el ApiCenterOnboardingPlugin
incorpore nuevas API.
Al ejecutar Dev Proxy con esta configuración, crea automáticamente nuevas entradas de API en el Centro de API de Azure para las API ocultas que detecta. Para cada nueva API, Dev Proxy genera una especificación de OpenAPI y la asocia a la API incorporada correspondiente en el Centro de API.
info Plugin ApiCenterOnboardingPlugin connecting to Azure...
info Listening on 127.0.0.1:8000...
Hotkeys: issue (w)eb request, (r)ecord, (s)top recording, (c)lear screen
Press CTRL+C to stop Dev Proxy
◉ Recording...
req ╭ GET https://jsonplaceholder.typicode.com/posts
api ╰ Passed through
req ╭ DELETE https://jsonplaceholder.typicode.com/posts/1
api ╰ Passed through
○ Stopped recording
info Creating OpenAPI spec from recorded requests...
info Created OpenAPI spec file jsonplaceholder.typicode.com-20240614104931.json
info Checking if recorded API requests belong to APIs in API Center...
info Loading APIs from API Center...
info Loading API definitions from API Center...
info New APIs that aren't registered in Azure API Center:
https://jsonplaceholder.typicode.com:
DELETE https://jsonplaceholder.typicode.com/posts/1
info Creating new API entries in API Center...
info Creating API new-jsonplaceholder-typicode-com-1718354977 for https://jsonplaceholder.typicode.com...
info DONE
Resumen
Con Dev Proxy y su ApiCenterOnboardingPlugin
, puede comprobar si la aplicación usa las API ocultas. El complemento analiza las solicitudes de API de la aplicación e informa sobre las solicitudes de API que no están registradas en el Centro de API de Azure. El complemento le permite incorporar fácilmente las API que faltan al Centro de API. Al combinar el complemento ApiCenterOnboardingPlugin
con el OpenApiSpecGeneratorPlugin
, puede generar automáticamente especificaciones de OpenAPI para las API recién incorporadas. Puede ejecutar esta comprobación manualmente o integrarla con la canalización de CI/CD para asegurarse de que la aplicación usa las API registradas antes de publicarla en producción.