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
- Konto platformy Azure z aktywną subskrypcją. Utwórz konto bezpłatnie.
- Zestaw SDK platformy .NET
Microsoft.SemanticKernel
Pakiet NuGetAzure.Identity
Pakiet NuGet- Tworzenie i wdrażanie zasobu usługi Azure OpenAI Service
- Tworzenie i wdrażanie aplikacji .NET w usłudze App Service
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
- Przejdź do strony aplikacji w witrynie Azure Portal, a następnie przewiń w dół do grupy Ustawienia.
- Wybierz Tożsamość.
- Na karcie Przypisane przez system przełącz pozycję Stan na Wł., 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.
Utwórz zasób tożsamości zarządzanej przypisanej przez użytkownika, postępując zgodnie z tymi instrukcjami.
W okienku nawigacji po lewej stronie aplikacji przewiń w dół do grupy Ustawienia.
Wybierz Tożsamość.
Wybierz pozycję Dodaj przypisane przez> użytkownika.
Znajdź utworzoną wcześniej tożsamość, wybierz ją, a następnie wybierz pozycję Dodaj.
Ważne
Po wybraniu pozycji Dodaj aplikacja zostanie ponownie uruchomiona.
Utwórz tożsamość przypisaną przez użytkownika:
az identity create --resource-group <groupName> --name <identityName>
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
- 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.
- W okienku nawigacji po lewej stronie wybierz pozycję Kontrola dostępu (Zarządzanie dostępem i tożsamościami).
- Wybierz pozycję Dodaj, a następnie wybierz pozycję Dodaj przypisanie roli.
- Na karcie Rola wybierz rolę Użytkownika interfejsu OpenAI usług Cognitive Services.
- Na karcie Członkowie wybierz tożsamość zarządzaną.
- 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
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". } );
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();
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. // ...