Delen via


App Service verifiëren en autoriseren bij Azure OpenAI met behulp van Microsoft Entra en de Semantic Kernel SDK

In dit artikel wordt gedemonstreerd hoe u door Microsoft Entra beheerde identiteiten gebruikt voor het verifiëren en autoriseren van een App Service-toepassing voor een Azure OpenAI-resource.

Dit artikel laat ook zien hoe u de Semantic Kernel SDK gebruikt om eenvoudig Microsoft Entra-verificatie te implementeren in uw .NET-toepassing.

Met behulp van een beheerde identiteit van Microsoft Entra heeft uw App Service-toepassing eenvoudig toegang tot beveiligde Azure OpenAI-resources zonder dat u geheimen handmatig hoeft in te richten of te roteren.

Vereisten

Een beheerde identiteit toevoegen aan App Service

Aan uw toepassing kunnen twee typen identiteiten worden toegekend:

  • Een door het systeem toegewezen identiteit is gekoppeld aan uw toepassing en wordt verwijderd als uw app wordt verwijderd. Een app kan slechts één door het systeem toegewezen identiteit hebben.
  • Een door de gebruiker toegewezen identiteit is een autonome Azure-resource die kan worden toegewezen aan uw app. Een app kan meerdere door de gebruiker toegewezen identiteiten hebben.

Een door het systeem toegewezen identiteit toevoegen

  1. Navigeer naar de pagina van uw app in Azure Portal en schuif omlaag naar de Instellingen groep.
  2. Selecteer Identiteit.
  3. Schakel op het tabblad Systeem toegewezen status in op Aan en selecteer Opslaan.

Voer de az webapp identity assign opdracht uit om een door het systeem toegewezen identiteit te maken:

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

Een door de gebruiker toegewezen identiteit toevoegen

Als u een door de gebruiker toegewezen identiteit aan uw app wilt toevoegen, maakt u de identiteit en voegt u vervolgens de resource-id toe aan uw app-configuratie.

  1. Maak een door de gebruiker toegewezen beheerde identiteitsresource door deze instructies te volgen.

  2. Schuif in het linkernavigatiedeelvenster van de pagina van uw app omlaag naar de Instellingen groep.

  3. Selecteer Identiteit.

  4. Selecteer Gebruiker toegewezen>toevoegen.

  5. Zoek de identiteit die u eerder hebt gemaakt, selecteer deze en selecteer vervolgens Toevoegen.

    Belangrijk

    Nadat u Toevoegen hebt geselecteerd, wordt de app opnieuw opgestart.

  1. Een door de gebruiker toegewezen identiteit maken:

    az identity create --resource-group <groupName> --name <identityName>
    
  2. Wijs de identiteit toe aan uw app:

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

Een Azure OpenAI-gebruikersrol toevoegen aan uw beheerde identiteit

  1. Navigeer in Azure Portal naar het bereik waartoe u Azure OpenAI toegang wilt verlenen. Het bereik kan een beheergroep, abonnement, resourcegroep of een specifieke Azure OpenAI-resource zijn.
  2. Selecteer toegangsbeheer (IAM) in het linkernavigatiedeelvenster.
  3. Selecteer Toevoegen en selecteer vervolgens Roltoewijzing toevoegen.
  4. Selecteer op het tabblad Rol de gebruikersrol Cognitive Services OpenAI .
  5. Selecteer op het tabblad Leden de beheerde identiteit.
  6. Selecteer op het tabblad Beoordelen en toewijzen de optie Beoordelen en toewijzen om de rol toe te wijzen.

Resourcebereik

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

Bereik van resourcegroep

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

Abonnementsbereik

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

Bereik van beheergroep

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

Verificatie op basis van tokens implementeren met behulp van Semantic Kernel SDK

  1. Initialiseer een DefaultAzureCredential object om uit te gaan van de beheerde identiteit van uw app:

    // 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. Bouw een Kernel object met de Azure OpenAI Chat Completion Service en gebruik de eerder gemaakte referenties:

    // 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. Gebruik het Kernel object om promptvoltooiing aan te roepen via 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.
    // ...