Condividi tramite


ApiCenterMinimalPermissionsPlugin

Controlla se l'app usa autorizzazioni minime per chiamare le API. Usa le informazioni sull'API dall'istanza del Centro API di Azure specificata.

Screenshot di un prompt dei comandi che mostra il controllo del proxy di sviluppo se le richieste API registrate usano token con autorizzazioni API minime.

Definizione dell'istanza del plug-in

{
  "name": "ApiCenterMinimalPermissionsPlugin",
  "enabled": true,
  "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
  "configSection": "apiCenterMinimalPermissionsPlugin"
}

Esempio di configurazione

{
  "apiCenterMinimalPermissionsPlugin": {
    "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.0/apicenterminimalpermissionsplugin.schema.json",
    "subscriptionId": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
    "resourceGroupName": "resource-group-name",
    "serviceName": "apic-instance",
    "workspaceName": "default"
  }
}

Proprietà di configurazione

Proprietà Descrizione Predefinito
resourceGroupName Nome del gruppo di risorse in cui si trova il Centro API di Azure. Nessuno
serviceName Nome dell'istanza del Centro API di Azure che Dev Proxy deve usare per verificare se le API usate nell'app sono registrate. Nessuno
subscriptionId ID della sottoscrizione di Azure in cui si trova l'istanza del Centro API di Azure. Nessuno
workspace Nome dell'area di lavoro del Centro API di Azure da usare. default
schemeName Nome della definizione dello schema di sicurezza usata per determinare le autorizzazioni minime. Se non specificato, il plug-in legge le informazioni dal primo schema oauth2 nella specifica Nessuno

Opzioni della riga di comando

Nessuno

Osservazioni:

Il ApiCenterMinimalPermissionsPlugin plug-in controlla se l'app usa autorizzazioni minime per chiamare le API. Per controllare le autorizzazioni, il plug-in usa informazioni sulle API registrate nell'istanza del Centro API di Azure specificata.

Connettersi al Centro API di Azure

Per connettersi al Centro API di Azure, il plug-in usa le credenziali di Azure (in questo ordine):

  • Ambiente
  • Identità del carico di lavoro
  • Identità gestita
  • Visual Studio
  • Visual Studio Code
  • Interfaccia della riga di comando di Azure
  • Azure PowerShell
  • CLI per sviluppatori di Azure

Se il plug-in non riesce a ottenere un token di accesso ad Azure, viene visualizzato un errore e Dev Proxy lo disabilita. Accedere ad Azure usando uno di questi strumenti e riavviare Dev Proxy per usare il plug-in ApiCenterMinimalPermissionsPlugin .

Se si usa Dev Proxy nelle pipeline CI/CD, è possibile passare i valori per le subscriptionIdproprietà , resourceGroupName, serviceNamee workspaceName come variabili di ambiente. Per usare le variabili di ambiente, anteporre il nome del valore con , @ad esempio:

{
  "apiCenterMinimalPermissionsPlugin": {
    "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.0/apicenterminimalpermissionsplugin.schema.json",
    "subscriptionId": "@AZURE_SUBSCRIPTION_ID",
    "resourceGroupName": "@AZURE_RESOURCE_GROUP_NAME",
    "serviceName": "@AZURE_APIC_INSTANCE_NAME",
    "workspaceName": "@AZURE_APIC_WORKSPACE_NAME"
  }
}

In questo esempio, il ApiCenterMinimalPermissionsPlugin plug-in imposta subscriptionIdrispettivamente le proprietà , resourceGroupNameserviceName, e workspaceName sui valori delle variabili di AZURE_SUBSCRIPTION_IDambiente , AZURE_RESOURCE_GROUP_NAMEAZURE_APIC_INSTANCE_NAME, e AZURE_APIC_WORKSPACE_NAME .

Definire le autorizzazioni API

Il ApiCenterMinimalPermissionsPlugin plug-in supporta il controllo delle autorizzazioni OAuth per le API protette con OAuth registrato nel Centro API di Azure. Il plug-in calcola le autorizzazioni minime necessarie per chiamare le API usate nell'app usando le informazioni del Centro API. Il plug-in confronta quindi le autorizzazioni usate nel token JWT (JSON Web Token) con gli ambiti minimi necessari per le richieste registrate da Dev Proxy.

Per definire le autorizzazioni per le API, includerle nella definizione OpenAPI dell'API. L'esempio seguente illustra come definire le autorizzazioni per un'API in una definizione OpenAPI:

{
  "openapi": "3.0.1",
  "info": {
    "title": "Northwind API",
    "description": "Northwind API",
    "version": "v1.0"
  },
  "servers": [
    {
      "url": "https://api.northwind.com"
    }
  ],
  "components": {
    "securitySchemes": {
      "OAuth2": {
        "type": "oauth2",
        "flows": {
          "authorizationCode": {
            "authorizationUrl": "https://login.microsoftonline.com/common/oauth2/authorize",
            "tokenUrl": "https://login.microsoftonline.com/common/oauth2/token",
            "scopes": {
              "customer.read": "Grants access to ready customer info",
              "customer.readwrite": "Grants access to read and write customer info"
            }
          }
        }
      }
    },
    "schemas": {
      "Customer": {
        "type": "object",
        // [...] trimmed for brevity
      }
    }
  },
  "paths": {
    "/customers/{customers-id}": {
      "description": "Provides operations to manage a customer",
      "get": {
        "summary": "Get customer by ID",
        "operationId": "getCustomerById",
        "security": [
          {
            "OAuth2": [
              "customer.read"
            ]
          },
          {
            "OAuth2": [
              "customer.readwrite"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json; charset=utf-8": {
                "schema": {
                  "$ref": "#/components/schemas/Customer"
                }
              }
            }
          }
        }
      },
      "patch": {
        "summary": "Update customer by ID",
        "operationId": "updateCustomerById",
        "security": [
          {
            "OAuth2": [
              "customer.readwrite"
            ]
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Customer"
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "No Content"
          }
        }
      },
      "parameters": [
        {
          "name": "customers-id",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ]
    }
  },
  "x-ms-generated-by": {
    "toolName": "Dev Proxy",
    "toolVersion": "0.27.0"
  }
}

La parte pertinente è la securitySchemes sezione in cui si definiscono gli ambiti OAuth usati dall'API. Quindi, per ogni operazione, includere gli ambiti necessari nella security sezione .

Ulteriori informazioni

Passo successivo