Udostępnij za pośrednictwem


Uwierzytelnianie i autoryzacja usługi App Service w usłudze Azure OpenAI przy użyciu usługi Microsoft Entra i zestawu SDK jądra semantycznego

W tym artykule pokazano, jak używać tożsamości zarządzanych przez firmę Microsoft do uwierzytelniania i autoryzacji aplikacji usługi App Service do zasobu usługi Azure OpenAI.

W tym artykule pokazano również, jak używać zestawu SDK jądra semantycznego do łatwego implementowania uwierzytelniania Microsoft Entra w aplikacji .NET.

Korzystając z tożsamości zarządzanej firmy Microsoft Entra, aplikacja usługi App Service może łatwo uzyskać dostęp do chronionych zasobów usługi Azure OpenAI bez konieczności ręcznego aprowizowania ani obracania wpisów tajnych.

Wymagania wstępne

Dodawanie tożsamości zarządzanej do usługi App Service

Aplikacja może mieć korzystać z dwóch typów tożsamości:

  • Tożsamość przypisana przez system jest powiązana z aplikacją i jest usuwana, gdy aplikacja zostanie usunięta. Aplikacja może mieć tylko jedną tożsamość przypisaną przez system.
  • Tożsamość przypisana przez użytkownika to autonomiczny zasób platformy Azure, który można przypisać do aplikacji. Aplikacja może mieć wiele tożsamości przypisanych przez użytkownika.

Dodawanie tożsamości przypisanej przez system

  1. Przejdź do strony aplikacji w witrynie Azure Portal, a następnie przewiń w dół do grupy Ustawienia.
  2. Wybierz Tożsamość.
  3. Na karcie Przypisane przez system przełącz pozycję Stan na ., a następnie wybierz pozycję Zapisz.

Uruchom polecenie , az webapp identity assign aby utworzyć tożsamość przypisaną przez system:

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

Dodawanie tożsamości przypisanej przez użytkownika

Aby dodać tożsamość przypisaną przez użytkownika do aplikacji, utwórz tożsamość, a następnie dodaj jej identyfikator zasobu do konfiguracji aplikacji.

  1. Utwórz zasób tożsamości zarządzanej przypisanej przez użytkownika, postępując zgodnie z tymi instrukcjami.

  2. W okienku nawigacji po lewej stronie aplikacji przewiń w dół do grupy Ustawienia.

  3. Wybierz Tożsamość.

  4. Wybierz pozycję Dodaj przypisane przez> użytkownika.

  5. Znajdź utworzoną wcześniej tożsamość, wybierz ją, a następnie wybierz pozycję Dodaj.

    Ważne

    Po wybraniu pozycji Dodaj aplikacja zostanie ponownie uruchomiona.

  1. Utwórz tożsamość przypisaną przez użytkownika:

    az identity create --resource-group <groupName> --name <identityName>
    
  2. Przypisz tożsamość do aplikacji:

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

Dodawanie roli użytkownika usługi Azure OpenAI do tożsamości zarządzanej

  1. W witrynie Azure Portal przejdź do zakresu, do którego chcesz udzielić dostępu do usługi Azure OpenAI . Zakres może być grupą zarządzania, subskrypcją, grupą zasobów lub określonym zasobem usługi Azure OpenAI.
  2. W okienku nawigacji po lewej stronie wybierz pozycję Kontrola dostępu (Zarządzanie dostępem i tożsamościami).
  3. Wybierz pozycję Dodaj, a następnie wybierz pozycję Dodaj przypisanie roli.
  4. Na karcie Rola wybierz rolę Użytkownika interfejsu OpenAI usług Cognitive Services.
  5. Na karcie Członkowie wybierz tożsamość zarządzaną.
  6. Na karcie Przeglądanie i przypisywanie wybierz pozycję Przejrzyj i przypisz, aby przypisać rolę.

Zakres zasobów

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

Zakres grupy zasobów

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

Zakres subskrypcji

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

Zakres grupy zarządzania

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

Implementowanie uwierzytelniania opartego na tokenach przy użyciu zestawu SDK jądra semantycznego

  1. Zainicjuj DefaultAzureCredential obiekt, aby założyć tożsamość zarządzaną aplikacji:

    // 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. Skompiluj obiekt zawierający usługę Kernel uzupełniania czatu openAI platformy Azure i użyj utworzonych wcześniej poświadczeń:

    // 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. Użyj obiektu , Kernel aby wywołać uzupełnianie monitu za pośrednictwem usługi 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.
    // ...