Compartilhar via


Autenticar no Azure OpenAI de um aplicativo hospedado no Azure usando Microsoft Entra ID

Este artigo demonstra como usar identidades gerenciadas do Microsoft Entra ID e a biblioteca de Microsoft.Extensions.AI para autenticar um aplicativo hospedado do Azure em um recurso do Azure OpenAI.

Uma identidade gerenciada da ID do Microsoft Entra permite que seu aplicativo acesse facilmente outros recursos protegidos do Microsoft Entra, como o Azure OpenAI. A identidade é gerenciada pela plataforma do Azure e não exige que você provisione, gerencie ou rotacione segredos.

Pré-requisitos

Adicionar uma identidade gerenciada ao Serviço de Aplicativo

As identidades gerenciadas fornecem uma identidade gerenciada automaticamente na ID do Microsoft Entra para que os aplicativos usem ao se conectar a recursos que dão suporte à autenticação do Microsoft Entra. Os aplicativos podem usar identidades gerenciadas para obter tokens do Microsoft Entra sem precisar gerenciar credenciais. Seu aplicativo pode receber dois tipos de identidades:

  • Uma identidade atribuída pelo sistema é vinculada ao seu aplicativo e é excluída se o seu aplicativo for excluído. Um aplicativo pode ter apenas uma identidade atribuída pelo sistema.
  • Uma identidade atribuída pelo usuário é um recurso autônomo do Azure que pode ser atribuído ao seu aplicativo. Um aplicativo pode ter várias identidades atribuídas pelo usuário.
  1. Navegue até a página do aplicativo no portal do Azure e role para baixo até o grupo Configurações.

  2. Selecionar Identidade.

  3. Na guia Atribuído pelo Sistema, alterne Status para Ativado e selecione Salvar.

    Uma captura de tela mostrando como adicionar uma identidade gerenciada atribuída ao sistema a um aplicativo.

    Nota

    A captura de tela anterior demonstra esse processo em um Serviço de Aplicativo do Azure, mas as etapas são semelhantes em outros hosts, como aplicativos de contêiner do Azure.

Execute o comando az webapp identity assign para criar uma identidade atribuída pelo sistema:

az webapp identity assign --name <appName> --resource-group <groupName>

Adicionar uma função de usuário do Azure OpenAI à identidade

  1. No portal do Azure, navegue até o escopo ao qual deseja conceder acesso ao OpenAI do Azure. O escopo pode ser um grupo de gerenciamento , uma assinatura , um grupo de recursos ou um recurso específico do Azure OpenAI.

  2. No painel de navegação à esquerda, selecione Controle de Acesso (IAM).

  3. Selecione Adicionare selecione Adicionar atribuição de função.

    Uma captura de tela mostrando como adicionar uma função RBAC.

  4. Na guia Função, selecione a função Usuário do OpenAI dos Serviços Cognitivos.

  5. Na guia Membros, selecione a identidade gerenciada.

  6. Na guia Examinar + atribuir, selecione Examinar + atribuir para atribuir a função.

Você pode usar a CLI do Azure para atribuir a função de usuário OpenAI dos Serviços Cognitivos à sua identidade gerenciada em escopos variados.

az role assignment create --assignee "<managedIdentityObjectID>" \
--role "Cognitive Services OpenAI User" \
--scope "/subscriptions/<subscriptionId>/resourcegroups/<resourceGroupName>/providers/<providerName>/<resourceType>/<resourceSubType>/<resourceName>"

Implementar a autenticação de identidade no código do aplicativo

  1. Adicione os seguintes pacotes NuGet ao seu aplicativo:

    dotnet add package Azure.Identity
    dotnet add package Azure.AI.OpenAI
    dotnet add package Microsoft.Extensions.Azure
    dotnet add package Microsoft.Extensions.AI
    dotnet add package Microsoft.Extensions.AI.OpenAI
    

    Os pacotes anteriores lidam com as seguintes preocupações para este cenário:

    • Azure.Identity: Fornece as funcionalidades principais para trabalhar com a Identidade do Microsoft Entra
    • Azure.AI.OpenAI: permite que seu aplicativo interface com o serviço Azure OpenAI
    • Microsoft.Extensions.Azure: fornece extensões auxiliares para registrar serviços para injeção de dependência
    • Microsoft.Extensions.AI: fornece abstrações de IA para tarefas comuns de IA
    • Microsoft.Extensions.AI.OpenAI: permite que você use tipos de serviço OpenAI como abstrações de IA fornecidas pelo Microsoft.Extensions.AI
  2. No arquivo Program.cs do aplicativo, crie um objeto DefaultAzureCredential para descobrir e configurar as credenciais disponíveis:

    // For example, will discover Visual Studio or Azure CLI credentials
    // in local environments and managed identity credentials in production deployments
    var credential = new DefaultAzureCredential(
        new DefaultAzureCredentialOptions
        {
            // If necessary, specify the tenant ID,
            // user-assigned identity client or resource ID, or other options
        }
    );
    
  3. Crie um serviço de IA e registre-o na coleção de serviços:

    string endpoint = builder.Configuration["AZURE_OPENAI_ENDPOINT"];
    string deployment = builder.Configuration["AZURE_OPENAI_GPT_NAME"];
    
    builder.Services.AddChatClient(
        new AzureOpenAIClient(new Uri(endpoint), credential)
        .AsChatClient(deployment));
    
  4. Injetar o serviço registrado para uso em seus pontos de extremidade:

    app.MapGet("/test-prompt", async (IChatClient chatClient) =>
    {
        return await chatClient.CompleteAsync("Test prompt", new ChatOptions());
    })
    .WithName("Test prompt");
    

    Dica

    Saiba mais sobre a injeção de dependência do ASP.NET Core e como registrar outros tipos de serviços de IA na documentação de injeção de dependência do SDK do Azure para .NET.