Partilhar via


Autenticar no Azure OpenAI a partir de uma aplicação hospedada no Azure usando o Microsoft Entra ID

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

Uma identidade gerenciada do Microsoft Entra ID permite que seu aplicativo acesse facilmente outros recursos protegidos pelo Microsoft Entra, como o Azure OpenAI. A identidade é gerida pela plataforma Azure e não exige que se provisionem, gerenciem ou rodem quaisquer 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 os aplicativos usarem ao se conectar a recursos que oferecem suporte à autenticação do Microsoft Entra. Os aplicativos podem usar identidades gerenciadas para obter tokens do Microsoft Entra sem precisar gerenciar nenhuma credencial. Seu aplicativo pode receber dois tipos de identidades:

  • Uma identidade atribuída pelo sistema- está ligada à sua aplicação e é removida se a aplicação for eliminada. Um aplicativo pode ter apenas uma identidade atribuída ao sistema.
  • Um de identidade atribuída pelo utilizador é um recurso autónomo do Azure que pode ser atribuído à sua aplicação. Um aplicativo pode ter várias identidades atribuídas pelo usuário.
  • atribuído pelo sistema
  • atribuído pelo usuário
  1. Navegue até a página do seu aplicativo no portal do Azuree, em seguida, role para baixo até o grupo de Configurações.

  2. Selecione Identidade.

  3. No separador atribuído Sistema, alterne Estado para Ativadoe, em seguida, selecione Guardar.

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

    Observação

    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 os Aplicativos de Contêiner do Azure.

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

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

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

  1. No Portal doAzure, navegue até o âmbito ao qual pretende conceder acesso ao Azure OpenAI. O escopo pode ser um grupo de gestão , uma assinatura , um grupo de recursos ou um recurso específico do Azure OpenAI .

  2. No painel de navegação esquerdo, selecione Controle de acesso (IAM).

  3. Selecione Adicionare, em seguida, 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 OpenAI dos Serviços Cognitivos.

  5. No separador Membros, selecione a identidade gerida.

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

Você pode usar a CLI do Azure para atribuir a função 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 autenticação de identidade no código do seu 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
    

    Cada um dos pacotes anteriores lida com as seguintes preocupações para esse cenário:

  2. No arquivo Program.cs do seu 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 com a 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. Injete o serviço registado para utilização nos seus endpoints:

    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ências no ASP.NET Core e como registrar outros tipos de serviços de IA na documentação do SDK do Azure para .NET sobre injeção de dependências .