Proteger o acesso aos servidores MCP no Gerenciamento de API

APPLIES TO: Desenvolvedor | Básico | Básico v2 | Padrão | Standard v2 | Premium | Premium v2

Ao usar suporte a servidores MCP no Gerenciamento de APIs, você pode expor e governar o acesso aos servidores MCP e suas ferramentas. Este artigo descreve como proteger o acesso aos servidores MCP gerenciados no Gerenciamento de API, incluindo servidores MCP expostos de APIs REST gerenciadas e servidores MCP existentes hospedados fora do Gerenciamento de API.

Você pode proteger o acesso de entrada ao servidor MCP (de um cliente MCP para o Gerenciamento de API) e o acesso de saída (do Gerenciamento de API para o servidor MCP).

Proteger o acesso de entrada

Autenticação baseada em chave

Se o servidor MCP estiver protegido com uma chave de assinatura de Gerenciamento de API passada no Ocp-Apim-Subscription-Key cabeçalho, os clientes MCP podem apresentar a chave nas requisições recebidas, e o Gerenciamento de API valida a chave. Por exemplo, no Visual Studio Code, você pode adicionar uma headers seção à configuração do servidor MCP para incluir a chave de assinatura nos cabeçalhos de solicitação:

{
  "name": "My MCP Server",
  "type": "remote",
  "url": "https://my-api-management-instance.azure-api.net/my-mcp-server",    
  "transport": "streamable-http",
  "headers": {
    "Ocp-Apim-Subscription-Key": "<subscription-key>"
  }
}

Observação

Gerencie as chaves de assinatura de forma segura usando configurações de espaço de trabalho do Visual Studio Code ou entradas seguras.

Autenticação baseada em token (OAuth 2.1 com Microsoft Entra ID)

Os clientes MCP podem apresentar tokens OAuth ou JWTs emitidos pelo Microsoft Entra ID usando um Authorization cabeçalho e validados pelo API Management.

Por exemplo, use a política validate-azure-ad-token para validar tokens do Microsoft Entra ID:

<validate-azure-ad-token tenant-id="your-entra-tenant-id" header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Unauthorized. Access token is missing or invalid.">     
    <client-application-ids>
        <application-id>your-client-application-id</application-id>
    </client-application-ids> 
</validate-azure-ad-token>

Encaminhar tokens para back-end

Os cabeçalhos de requisição são automaticamente encaminhados (com certas exclusões) para as invocações da ferramenta MCP. Esse recurso simplifica a integração com APIs downstream que dependem de cabeçalhos para roteamento, contexto ou autenticação.

Se você precisar encaminhar explicitamente o Authorization cabeçalho para validar as solicitações recebidas, use uma das seguintes abordagens:

  • Defina Authorization explicitamente como um cabeçalho necessário nas configurações da API e encaminhe o cabeçalho na política Outbound.

    Exemplo de trecho de política:

    <!-- Forward Authorization header to backend --> 
    <set-header name="Authorization" exists-action="override"> 
        <value>@(context.Request.Headers.GetValueOrDefault("Authorization"))</value> 
    </set-header> 
    
  • Use o gerenciador de credenciais do Gerenciamento de API e as políticas (get-authorization-context, set-header) para encaminhar o token com segurança. Para saber mais, veja Acesso de saída seguro.

Para obter mais opções e exemplos de autorização de entrada, consulte:

Proteger acesso de saída

Use o gerenciador de credenciais da API Management para injetar tokens OAuth 2.0 de forma segura para as requisições de API backend feitas pelas ferramentas de servidor MCP.

Etapas para configurar o acesso de saída baseado em OAuth 2.0

Etapa 1: Registre um aplicativo no provedor de identidade.

Etapa 2: Crie um provedor de credenciais no Gerenciamento de API vinculado ao provedor de identidade.

Etapa 3: Configurar conexões no gerenciador de credenciais.

Etapa 4: Aplique as políticas do Gerenciamento de API para buscar e anexar credenciais dinamicamente.

Por exemplo, a política a seguir recupera um token de acesso do gerenciador de credenciais e o define no cabeçalho Authorization da solicitação de saída:

<!-- Add to inbound policy. -->
<get-authorization-context
    provider-id="your-credential-provider-id" 
    authorization-id="auth-01" 
    context-variable-name="auth-context" 
    identity-type="managed" 
    ignore-error="false" />
<!-- Attach the token to the backend call -->
<set-header name="Authorization" exists-action="override">
    <value>@("Bearer " + ((Authorization)context.Variables.GetValueOrDefault("auth-context"))?.AccessToken)</value>
</set-header>

Para obter um guia passo a passo para chamar um back-end de exemplo usando credenciais geradas no gerenciador de credenciais, consulte Configurar o gerenciador de credenciais – GitHub.