Toegang tot een zoek-app autoriseren met behulp van Microsoft Entra-id

Zoektoepassingen die zijn gebouwd op Azure AI Search kunnen nu gebruikmaken van het Microsoft Identity Platform voor geverifieerde en geautoriseerde toegang. In Azure is de id-provider Microsoft Entra-id. Een belangrijk voordeel van het gebruik van Microsoft Entra-id is dat uw referenties en API-sleutels niet meer hoeven te worden opgeslagen in uw code. Microsoft Entra verifieert de beveiligingsprincipaal (een gebruiker, groep of service) die de toepassing uitvoert. Als de verificatie slaagt, retourneert Microsoft Entra ID het toegangstoken voor de toepassing en kan de toepassing vervolgens het toegangstoken gebruiken om aanvragen voor Azure AI Search te autoriseren.

In dit artikel leest u hoe u uw client configureert voor Microsoft Entra-id:

  • Maak voor verificatie een beheerde identiteit voor uw toepassing. U kunt een ander type beveiligingsprincipaalobject gebruiken, maar in dit artikel worden beheerde identiteiten gebruikt, omdat er geen referenties meer nodig zijn.

  • Wijs voor autorisatie een Azure-rol toe aan de beheerde identiteit die machtigingen verleent voor het uitvoeren van query's of het beheren van indexeringstaken.

  • Werk uw clientcode bij om aan te roepen TokenCredential(). U kunt bijvoorbeeld aan de slag met nieuwe SearchClient(eindpunt, nieuw DefaultAzureCredential()) om te verifiëren via een Microsoft Entra-id met behulp van Azure.Identity.

Op rollen gebaseerde toegang configureren voor het gegevensvlak

Van toepassing op: Inzender voor zoekindexgegevens, Zoekindexgegevenslezer, Inzender voor zoekservice

In deze stap configureert u uw zoekservice voor het herkennen van een autorisatieheader voor gegevensaanvragen die een OAuth2-toegangstoken bieden.

  1. Meld u aan bij Azure Portal en open de zoekservicepagina.

  2. Selecteer Sleutels in het linkernavigatiedeelvenster.

    Schermopname van de pagina sleutels met verificatieopties.

  3. Kies een optie voor API-toegangsbeheer . We raden beide aan als u flexibiliteit wilt of apps wilt migreren.

    Optie Omschrijving
    API-sleutel (standaard) Vereist een beheerder of query-API-sleutels in de aanvraagheader voor autorisatie. Er worden geen rollen gebruikt.
    Op rollen gebaseerd toegangsbeheer Vereist dat u lid bent van een roltoewijzing om de taak te voltooien, zoals beschreven in de volgende stap. Er is ook een autorisatieheader vereist.
    Beide Aanvragen zijn geldig met behulp van een API-sleutel of op rollen gebaseerd toegangsbeheer.

De wijziging is onmiddellijk van kracht, maar wacht enkele seconden voordat u gaat testen.

Alle netwerkoproepen voor zoekservicebewerkingen en -inhoud respecteren de optie die u selecteert: API-sleutels, bearer-token of een van beide als u Beide selecteert.

Wanneer u op rollen gebaseerd toegangsbeheer inschakelt in de portal, is de foutmodus http401WithBearerChallenge als de autorisatie mislukt.

Een beheerde identiteit maken

In deze stap maakt u een beheerde identiteit voor uw clienttoepassing.

  1. Meld u aan bij het Azure-portaal.

  2. Zoek naar beheerde identiteiten.

  3. Selecteer Maken.

  4. Geef uw beheerde identiteit een naam en selecteer een regio. Ten slotte selecteert u Maken.

    Schermopname van de wizard Beheerde identiteit maken.

Een rol toewijzen aan de beheerde identiteit

Vervolgens moet u de beheerde identiteit van uw client toegang verlenen tot uw zoekservice. Azure AI Search heeft verschillende ingebouwde rollen. U kunt ook een aangepaste rol maken.

Het is een best practice om minimale machtigingen te verlenen. Als uw toepassing alleen query's hoeft te verwerken, moet u de rol Search Index Data Reader toewijzen. Als de client zowel lees- als schrijftoegang nodig heeft voor een zoekindex, moet u de rol Inzender voor zoekindexgegevens gebruiken.

  1. Meld u aan bij het Azure-portaal.

  2. Navigeer naar uw zoekservice.

  3. Selecteer Toegangsbeheer (IAM) in het linkernavigatiedeelvenster.

  4. Selecteer + Toevoegen>Roltoewijzing toevoegen.

    Schermopname van de pagina Toegangsbeheer (IAM) met het menu Roltoewijzing toevoegen geopend.

  5. Selecteer een toepasselijke rol:

    • Eigenaar

    • Inzender

    • Lezer

    • Inzender voor zoekservice

    • Inzender voor zoekindexgegevens

    • Zoekindexgegevenslezer

      Notitie

      De rol Eigenaar, Inzender, Lezer en Zoekservicebijdrager zijn besturingsvlakrollen en bieden u geen toegang tot de gegevens in een zoekindex. Voor gegevenstoegang kiest u de rol Inzender voor zoekindexgegevens of de rol Lezer van zoekindexgegevens. Zie ingebouwde rollen die worden gebruikt in Search voor meer informatie over het bereik en doel van elke rol.

  6. Selecteer op het tabblad Leden de beheerde identiteit die u toegang wilt geven tot uw zoekservice.

  7. Selecteer op het tabblad Beoordelen en toewijzen de optie Beoordelen en toewijzen om de rol toe te wijzen.

U kunt meerdere rollen, zoals Inzender voor zoekservice en Inzender voor zoekindexgegevens, toewijzen als uw toepassing uitgebreide toegang nodig heeft tot de zoekservices, objecten en inhoud.

U kunt ook rollen toewijzen met behulp van PowerShell.

Microsoft Entra-verificatie instellen in uw client

Zodra u een beheerde identiteit en een roltoewijzing voor de zoekservice hebt, kunt u code toevoegen aan uw toepassing om de beveiligingsprincipaal te verifiëren en een OAuth 2.0-token te verkrijgen.

Gebruik de volgende clientbibliotheken voor op rollen gebaseerd toegangsbeheer:

Notitie

Zie Toegang verlenen tot Microsoft Entra-webtoepassingen autoriseren met behulp van de OAuth 2.0-codetoezengelingsstroom voor meer informatie over de stroom voor het verlenen van OAuth 2.0-code die wordt gebruikt door Microsoft Entra-id.

De volgende instructies verwijzen naar een bestaand C#-voorbeeld om de codewijzigingen te demonstreren.

  1. Kloon als uitgangspunt de broncode voor de C#-sectie van quickstart: Zoeken in volledige tekst met behulp van de Azure SDK's.

    Het voorbeeld maakt momenteel gebruik van verificatie op basis van sleutels en het AzureKeyCredential maken van de SearchClient verificatie, SearchIndexClient maar u kunt een kleine wijziging aanbrengen om over te schakelen naar verificatie op basis van rollen.

  2. Werk het NuGet-pakket Azure.Search.Documents bij naar versie 11.4 of hoger.

  3. Importeer de Azure.Identity-bibliotheek om toegang te krijgen tot andere verificatietechnieken.

  4. Gebruik in plaats van AzureKeyCredential in het begin van Main()Program.cs, DefaultAzureCredential zoals in het onderstaande codefragment:

    // Create a SearchIndexClient to send create/delete index commands
    SearchIndexClient adminClient = new SearchIndexClient(serviceEndpoint, new DefaultAzureCredential());
    // Create a SearchClient to load and query documents
    SearchClient srchclient = new SearchClient(serviceEndpoint, indexName, new DefaultAzureCredential());
    

Lokaal testen

Door de gebruiker toegewezen beheerde identiteiten werken alleen in Azure-omgevingen. Als u deze code lokaal uitvoert, DefaultAzureCredential valt u terug op verificatie met uw referenties. Zorg ervoor dat u uzelf de vereiste toegang geeft tot de zoekservice als u van plan bent om de code lokaal uit te voeren.

  1. Controleer of uw account roltoewijzingen heeft om alle bewerkingen in het quickstart-voorbeeld uit te voeren. Als u een index wilt maken en er query's op wilt uitvoeren, gebruikt u 'Search Index Data Reader' en 'Search Index Data Contributor'.

  2. Ga naar Extra>Opties>voor Azure Service Authentication om uw Azure-aanmeldingsaccount te kiezen.

U moet nu het project vanuit Visual Studio op uw lokale systeem kunnen uitvoeren met behulp van op rollen gebaseerd toegangsbeheer voor autorisatie.

Notitie

De documentatie over Azure.Identity bevat meer informatie over DefaultAzureCredential en het gebruik van Microsoft Entra-verificatie met de Azure SDK voor .NET. DefaultAzureCredential is bedoeld om aan de slag te gaan met de SDK te vereenvoudigen door veelvoorkomende scenario's met redelijk standaardgedrag te verwerken. Ontwikkelaars die meer controle willen of waarvan het scenario niet wordt geleverd door de standaardinstellingen, moeten andere referentietypen gebruiken.

Zie ook