Partilhar via


Autenticar e autorizar o Serviço de Aplicativo para o Azure OpenAI usando o Microsoft Entra e o SDK do Kernel Semântico

Este artigo demonstra como usar identidades gerenciadas pelo Microsoft Entra, para autenticar e autorizar um aplicativo do Serviço de Aplicativo para um recurso do Azure OpenAI.

Este artigo também demonstra como usar o SDK do kernel semântico para implementar facilmente a autenticação do Microsoft Entra em seu aplicativo .NET.

Usando uma identidade gerenciada do Microsoft Entra, seu aplicativo do Serviço de Aplicativo pode acessar facilmente recursos protegidos do Azure OpenAI sem precisar provisionar ou girar manualmente quaisquer segredos.

Pré-requisitos

Adicionar uma identidade gerenciada ao Serviço de Aplicativo

Pode conceder dois tipos de identidades à aplicação:

  • Uma identidade atribuída pelo sistema está associada à aplicação e será eliminada se a aplicação for eliminada. Um aplicativo pode ter apenas uma identidade atribuída ao sistema.
  • Uma identidade atribuída pelo utilizador é um recurso autónomo do Azure que pode ser atribuído à aplicação. Uma aplicação pode ter várias identidades atribuídas pelo utilizador.

Adicionar uma identidade atribuída ao sistema

  1. Navegue até a página do seu aplicativo no portal do Azure e role para baixo até o grupo Configurações.
  2. Selecione a Identidade.
  3. Na guia Sistema atribuído, alterne Status para Ativado e selecione Salvar.

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

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

Adicionar uma identidade atribuída pelo usuário

Para adicionar uma identidade atribuída pelo usuário ao seu aplicativo, crie a identidade e adicione seu identificador de recurso à configuração do aplicativo.

  1. Crie um recurso de identidade gerenciado atribuído pelo usuário seguindo estas instruções.

  2. No painel de navegação esquerdo da página da sua aplicação, desloque-se para baixo até ao grupo Definições .

  3. Selecione a Identidade.

  4. Selecione Adicionar atribuído ao> usuário.

  5. Localize a identidade que criou anteriormente, selecione-a e, em seguida, selecione Adicionar.

    Importante

    Depois de selecionar Adicionar, o aplicativo é reiniciado.

  1. Crie uma identidade atribuída pelo usuário:

    az identity create --resource-group <groupName> --name <identityName>
    
  2. Atribua a identidade ao seu aplicativo:

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

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

  1. No Portal do Azure, navegue até o escopo ao qual você deseja conceder acesso ao Azure OpenAI . O escopo pode ser um grupo de gerenciamento, assinatura, 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 Adicionar e, em seguida, selecione Adicionar atribuição de função.
  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. No separador Rever + atribuir, selecione Rever + atribuir para atribuir a função.

Âmbito do recurso

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

Âmbito do grupo de recursos

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

Âmbito da subscrição

az role assignment create --assignee "<managedIdentityObjectID>" \
--role "Cognitive Services OpenAI User" \
--scope "/subscriptions/<subscriptionId>"

Âmbito do grupo de gestão

az role assignment create --assignee "<managedIdentityObjectID>" \
--role "Cognitive Services OpenAI User" \
--scope "/providers/Microsoft.Management/managementGroups/<managementGroupName>"

Implementar autenticação baseada em token usando o SDK do Kernel Semântico

  1. Inicialize um DefaultAzureCredential objeto para assumir a identidade gerenciada do seu aplicativo:

    // Initialize a DefaultAzureCredential.
    // This credential type will try several authentication flows in order until one is available.
    // Will pickup Visual Studio or Azure CLI credentials in local environments.
    // Will pickup managed identity credentials in production deployments.
    TokenCredential credentials = new DefaultAzureCredential(
        new DefaultAzureCredentialOptions
        {
            // If using a user-assigned identity specify either:
            // ManagedIdentityClientId or ManagedIdentityResourceId.
            // e.g.: ManagedIdentityClientId = "myIdentityClientId".
        }
    );
    
  2. Crie um Kernel objeto que inclua o Serviço de Conclusão de Chat do Azure OpenAI e use as credenciais criadas anteriormente:

    // Retrieve the endpoint and deployment obtained from the Azure OpenAI deployment.
    // Must use the deployment name not the underlying model name.
    IConfigurationRoot config = new ConfigurationBuilder().AddUserSecrets<Program>().Build();
    string endpoint = config["AZURE_OPENAI_ENDPOINT"]!;
    string deployment = config["AZURE_OPENAI_GPT_NAME"]!;
    
    // Build a Kernel that includes the Azure OpenAI Chat Completion Service.
    // Include the previously created token credential.
    Kernel kernel = Kernel
        .CreateBuilder()
        .AddAzureOpenAIChatCompletion(deployment, endpoint, credentials)
        .Build();
    
  3. Use o objeto para invocar a conclusão de prompt por meio do Kernel Azure OpenAI:

    // Use the Kernel to invoke prompt completion through Azure OpenAI.
    // The Kernel response will be null if the model can't be reached.
    string? result = await kernel.InvokePromptAsync<string>("Please list three Azure services");
    Console.WriteLine($"Output: {result}");
    
    // Continue sending and receiving messages between the user and AI.
    // ...