Acesso seguro a servidores MCP no Gerenciamento de API

APLICA-SE A: Developer | Basic | Basic v2 | Standard | Standard v2 | Premium | Premium v2

Ao utilizar o suporte de servidores MCP na API Management, pode expor e governar o acesso aos servidores MCP e às suas ferramentas. Este artigo descreve como proteger o acesso a servidores MCP gerenciados no Gerenciamento de API, incluindo servidores MCP expostos a partir 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).

Acesso de entrada seguro

Autenticação baseada em chave

Se o servidor MCP estiver protegido com uma chave de subscrição de Gestão de API passada no Ocp-Apim-Subscription-Key cabeçalho, os clientes MCP podem apresentar a chave nos pedidos recebidos, e a Gestão de APIs valida a chave. Por exemplo, no Visual Studio Code, pode adicionar uma headers secção à configuração do servidor MCP para incluir a chave de subscrição nos cabeçalhos do pedido:

{
  "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

Gerir as chaves de subscrição de forma segura usando as definições do espaço de trabalho do Visual Studio Code ou entradas seguras.

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

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

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

<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 dos pedidos são automaticamente encaminhados (com certas exclusões) para as invocações da ferramenta MCP. Esta funcionalidade simplifica a integração com APIs downstream que dependem de cabeçalhos para encaminhamento, contexto ou autenticação.

Se precisar de encaminhar explicitamente o Authorization cabeçalho para validar pedidos recebidos, use uma das seguintes abordagens:

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

    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, consulte Acesso de saída seguro.

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

Acesso de saída seguro

Use o gestor de credenciais da API Management para injetar de forma segura tokens OAuth 2.0 para pedidos de API backend feitos pelas ferramentas de servidor MCP.

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

1º Passo: Registre um aplicativo no provedor de identidade.

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

3º Passo: Configure conexões dentro do gerenciador de credenciais.

4º passo: Aplique políticas de 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 Authorization cabeçalho 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 exemplo de back-end usando credenciais geradas no gerenciador de credenciais, consulte Configurar o gerenciador de credenciais - GitHub.