Dela via


Snabbstart: Anropa ett webb-API i en daemon-exempelapp

I den här snabbstarten använder du ett exempel daemonprogram för att hämta en åtkomsttoken och anropa ett skyddat webb-API med hjälp av Microsoft Authentication Library (MSAL).

Innan du börjar använder du Välj en klienttyp väljare överst på den här sidan för att välja klienttyp. Microsoft Entra ID tillhandahåller två klientkonfigurationer, personal och externa. En klientkonfiguration för personal är avsedd för dina anställda, interna appar och andra organisationsresurser. En extern användare är för dina kundinriktade appar.

Exempelappen som du använder i den här snabbstarten hämtar en åtkomsttoken för att anropa Microsoft Graph API.

Förutsättningar

Registrera applikationen och spela in identifierare

För att slutföra registreringen anger du ett namn för programmet och anger vilka kontotyper som stöds. När programmet har registrerats översiktsfönstret visas de identifierare som behövs i programmets källkod.

  1. Logga in på administrationscentret för Microsoft Entra.

  2. Om du har åtkomst till flera klienter använder du ikonen Inställningar på den översta menyn för att växla till klientorganisationen där du vill registrera programmet från menyn Kataloger + prenumerationer.

  3. Navigera till Identity>Applications>App registrations, välj Ny registrering.

  4. Ange ett Namn för programmet, till exempel identity-client-daemon-app.

  5. För kontotyper som stödsväljer du endast Konton i den här organisationskatalogen. Om du vill ha information om olika kontotyper väljer du alternativet Hjälp mig att välja.

  6. Välj Registrera.

    Skärmbild som visar hur du anger ett namn och väljer kontotypen i administrationscentret för Microsoft Entra.

  7. Programmets översiktsfönster visas när registreringen är klar. Registrera Directory-ID(klient)-ID:t, program-ID(klient)-ID:t och objekt-ID som ska användas i programmets källkod.

    Skärmbild som visar identifierarvärdena på översiktssidan i administrationscentret för Microsoft Entra.

    Notis

    De kontotyper som stöds kan ändras genom att hänvisa till Ändra de kontotyper som stöds av en applikation.

Skapa en klienthemlighet

Skapa en klienthemlighet för det registrerade programmet. Programmet använder klienthemligheten för att bevisa sin identitet när den begär token:

  1. På sidan Appregistreringar väljer du det program som du skapade (till exempel webbappens klienthemlighet) för att öppna sidan Översikt.
  2. Under Hanteraväljer du Certifikat & hemligheter>Klienthemligheter>Ny klienthemlighet.
  3. I rutan Beskrivning anger du en beskrivning av klienthemligheten (till exempel webbappens klienthemlighet).
  4. Under Upphörväljer du en varaktighet för vilken hemligheten är giltig (enligt organisationens säkerhetsregler) och väljer sedan Lägg till.
  5. Registrera hemlighetens värde. Du använder det här värdet för konfiguration i ett senare steg. Det hemliga värdet visas inte igen och kan inte hämtas på något sätt när du har navigerat bort från -certifikat och hemligheter. Se till att du registrerar den.

När du skapar autentiseringsuppgifter för ett konfidentiellt klientprogram:

  • Microsoft rekommenderar att du använder ett certifikat i stället för en klienthemlighet innan du flyttar programmet till en produktionsmiljö. För mer information om hur du använder ett certifikat, se anvisningarna i autentiseringscertifikatsuppgifter för Microsoft identity platform-applikationen.

  • I testsyfte kan du skapa ett självsignerat certifikat och konfigurera dina appar så att de autentiserar med det. Men i produktionsmiljönbör du köpa ett certifikat som signerats av en välkänd certifikatutfärdare och sedan använda Azure Key Vault- för att hantera certifikatåtkomst och livslängd.

Bevilja API-behörigheter till daemonappen

För att daemonappen ska få åtkomst till data i Microsoft Graph API ger du den de behörigheter den behöver. Daemonappen behöver behörigheter för programtyp. Användarna kan inte interagera med ett daemonprogram, så innehavaradministratören måste godkänna dessa behörigheter. Använd följande steg för att bevilja och samtycka till behörigheterna:

För .NET-daemonappen behöver du inte bevilja och samtycka till någon behörighet. Den här daemonappen läser sin egen appregistreringsinformation så att den kan göra det utan att beviljas några programbehörigheter.

Klona eller ladda ned exempelprogrammet

Om du vill hämta exempelprogrammet kan du antingen klona det från GitHub eller ladda ned det som en .zip fil.

  • Om du vill klona exemplet öppnar du en kommandotolk och navigerar till den platsen där du vill skapa projektet och anger följande kommando:
git clone https://github.com/Azure-Samples/ms-identity-docs-code-dotnet.git
  • Ladda ned filen .zip. Extrahera den till en filsökväg där namnets längd är färre än 260 tecken.

Konfigurera projektet

Använd följande steg för att använda din appregistreringsinformation i exempelprogrammet för klientdaemon:

  1. Öppna ett konsolfönster och navigera sedan till katalogen ms-identity-docs-code-dotnet/console-daemon:

    cd ms-identity-docs-code-dotnet/console-daemon
    
  2. Öppna Program.cs och ersätt filinnehållet med följande kodfragment.

     // Full directory URL, in the form of https://login.microsoftonline.com/<tenant_id>
     Authority = " https://login.microsoftonline.com/Enter_the_tenant_ID_obtained_from_the_Microsoft_Entra_admin_center",
     // 'Enter the client ID obtained from the Microsoft Entra admin center
     ClientId = "Enter the client ID obtained from the Microsoft Entra admin center",
     // Client secret 'Value' (not its ID) from 'Client secrets' in the Microsoft Entra admin center
     ClientSecret = "Enter the client secret value obtained from the Mifcrosoft Entra admin center",
     // Client 'Object ID' of app registration in Microsoft Entra admin center - this value is a GUID
     ClientObjectId = "Enter the client Object ID obtained from the Microsoft Entra admin center"
    
    • Authority – Utfärdaren är en URL som anger en katalog som MSAL kan begära token från. Ersätt Enter_the_tenant_ID_obtained_from_the_Microsoft_Entra_admin_center med det Directory-ID (klientorganisationens) tidigare registrerade värde.
    • ClientId – Programmets identifierare, även kallad klienten. Ersätt texten med citattecken med det Application (client) ID värde som registrerades tidigare från översiktssidan för det registrerade programmet.
    • ClientSecret – Klienthemligheten som skapats för programmet i administrationscentret för Microsoft Entra. Ange värdet för klienthemligheten.
    • ClientObjectId – objekt-ID för klientprogrammet. Ersätt texten med citattecken med det Object ID värde som du registrerade tidigare från översiktssidan för det registrerade programmet.

Köra och testa programmet

Du har konfigurerat exempelappen. Du kan fortsätta att köra och testa den.

Kör följande kommando från konsolfönstret för att skapa och köra programmet:

dotnet run

När programmet har körts visas ett svar som liknar följande kodfragment (förkortat för korthet):

{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#applications/$entity",
"id": "00001111-aaaa-2222-bbbb-3333cccc4444",
"deletedDateTime": null,
"appId": "00001111-aaaa-2222-bbbb-3333cccc4444",
"applicationTemplateId": null,
"disabledByMicrosoftStatus": null,
"createdDateTime": "2021-01-17T15:30:55Z",
"displayName": "identity-dotnet-console-app",
"description": null,
"groupMembershipClaims": null,
...
}

Så här fungerar det

Ett daemonprogram hämtar en token för sig själv (inte för en användares räkning). Användare kan inte interagera med ett daemonprogram eftersom det kräver en egen identitet. Den här typen av program begär en åtkomsttoken med hjälp av dess programidentitet genom att presentera dess program-ID, autentiseringsuppgifter (hemlighet eller certifikat) och en program-ID-URI. Daemon-programmet använder standard-OAuth 2.0-klientreferensflöde för att hämta en åtkomsttoken.

Appen hämtar en åtkomsttoken från Microsofts identitetsplattform. Åtkomsttoken är begränsad till Microsoft Graph API. Appen använder sedan åtkomsttoken för att begära sin egen programregistreringsinformation från Microsoft Graph API. Appen kan begära valfri resurs från Microsoft Graph API så länge åtkomsttoken har rätt behörigheter.

Exemplet visar hur ett obevakat jobb eller En Windows-tjänst kan köras med en programidentitet i stället för en användares identitet.

Förutsättningar

Registrera applikationer och registrera identifierare

I det här steget registrerar du daemonappen och webb-API-appen i administrationscentret för Microsoft Entra och anger omfången för webb-API:et.

Registrera ett webb-API-program

  1. Logga in på administrationscentret för Microsoft Entra som minst en Programutvecklare.

  2. Om du har åtkomst till flera klienter använder du ikonen Inställningar på den översta menyn för att växla till den externa klientorganisationen från menyn Kataloger + prenumerationer.

  3. Bläddra till Identitet>Applikationer>Appregistreringar.

  4. Välj + Ny registrering.

  5. På sidan Registrera ett program som visas anger du programmets registreringsinformation:

    1. I avsnittet Namn anger du ett beskrivande programnamn som ska visas för appens användare, till exempel ciam-ToDoList-api.

    2. Under Kontotyper som stödsväljer du endast Konton i den här organisationskatalogen.

  6. Välj Registrera för att skapa programmet.

  7. Programmets översiktsfönster visas när registreringen är klar. Registrera katalog-ID (hyresgäst) och applikation-ID (klient) som ska användas i applikationens källkod.

Konfigurera app-roller

Ett API måste publicera minst en applikationsroll för applikationer, även kallad programbehörighet, för att klientapparna ska få en access-token som sig själva. Programbehörigheter är den typ av behörigheter som API:er bör publicera när de vill att klientprogram ska kunna autentiseras som sig själva och inte behöver logga in användare. Följ dessa steg för att publicera ett programtillstånd:

  1. På sidan Appregistreringar väljer du det program som du skapade (till exempel ciam-ToDoList-api) för att öppna sidan Översikt.

  2. Under Hanteraväljer du Applikationsroller.

  3. Välj Skapa approlloch ange sedan följande värden och välj sedan Använd för att spara ändringarna:

    Egenskap Värde
    Visningsnamn ToDoList.Read.All
    Tillåtna medlemstyper Applikationer
    Värde ToDoList.Read.All
    Beskrivning Tillåt att appen läser alla användares ToDo-lista med hjälp av "TodoListApi"
  4. Välj Skapa approll igen och ange sedan följande värden för den andra approllen och välj sedan Använd för att spara ändringarna:

    Egenskap Värde
    Visningsnamn AttGöraLista.LäsSkriv.Allt
    Tillåtna medlemstyper Applikationer
    Värde ToDoList.ReadWrite.All
    Beskrivning Tillåt att appen läser och skriver alla användares ToDo-lista med hjälp av "ToDoListApi"

Konfigurera valfria anspråk

Du kan lägga till idtyp valfritt anspråk för att hjälpa webb-API:et att avgöra om en token är en apptoken eller en app + användartoken. Även om du kan använda en kombination av scp-- och -roller anspråk för samma ändamål, är det enklaste sättet att skilja en apptoken och en app + användartoken åt med hjälp av idtyp anspråk. Värdet för det här anspråket är till exempel app när token är en apptoken.

Registrera daemonappen

För att ditt program ska kunna logga in användare med Microsoft Entra måste Microsoft Entras externa ID göras medveten om det program som du skapar. Appregistreringen upprättar en förtroenderelation mellan appen och Microsoft Entra. När du registrerar ett program genererar externt ID en unik identifierare som kallas ett program-ID (klient)-ID, ett värde som används för att identifiera din app när du skapar autentiseringsbegäranden.

Följande steg visar hur du registrerar din app i administrationscentret för Microsoft Entra:

  1. Logga in på administrationscentret för Microsoft Entra som minst en Programutvecklare.

  2. Om du har åtkomst till flera hyrtagare använder du ikonen Inställningar i den övre menyn för att växla till din externa hyrtagare från menyn Kataloger och prenumerationer.

  3. Bläddra till Identity>Applications>App registrations.

  4. Välj + Ny registrering.

  5. På sidan Registrera en applikation som visas.

    1. Ange ett meningsfullt Namn för applikationen som visas för användarna av appen, till exempel ciam-client-app.
    2. Under Kontotyper som stödsväljer du endast Konton i den här organisationskatalogen.
  6. Välj Registrera.

  7. Programmets översiktsfönster visas vid lyckad registrering. Registrera programklient-ID som ska användas i källkoden för din applikation.

Skapa en klienthemlighet

Skapa en klienthemlighet för det registrerade programmet. Programmet använder klienthemligheten för att bevisa sin identitet när den begär token:

  1. På sidan Appregistreringar väljer du det program som du skapade (till exempel webbappens klienthemlighet) för att öppna sidan Översikt.
  2. Under Hanteraväljer du Certifikat & hemligheter>Klienthemligheter>Ny klienthemlighet.
  3. I rutan Beskrivning anger du en beskrivning av klienthemligheten (till exempel webbappens klienthemlighet).
  4. Under Upphörväljer du en varaktighet för vilken hemligheten är giltig (enligt organisationens säkerhetsregler) och väljer sedan Lägg till.
  5. Registrera hemlighetens värde. Du använder det här värdet för konfiguration i ett senare steg. Det hemliga värdet visas inte igen och kan inte hämtas på något sätt när du har navigerat bort från -certifikat och hemligheter. Se till att du registrerar den.

När du skapar autentiseringsuppgifter för ett konfidentiellt klientprogram:

  • Microsoft rekommenderar att du använder ett certifikat i stället för en klienthemlighet innan du flyttar programmet till en produktionsmiljö. Mer information om hur du använder ett certifikat finns i anvisningarna i certifikatautentiseringsuppgifter för Microsoft identity platform-applikation.

  • I testsyfte kan du skapa ett självsignerat certifikat och konfigurera dina appar så att de autentiserar med det. Men i produktionsmiljönbör du köpa ett certifikat som signerats av en välkänd certifikatutfärdare och sedan använda Azure Key Vault- för att hantera certifikatåtkomst och livslängd.

Bevilja API-behörigheter till daemonappen

  1. På sidan Appregistreringar väljer du det program som du skapade, till exempel ciam-client-app.

  2. Under Hanteraväljer du API-behörigheter.

  3. Under Konfigurerade behörigheterväljer du Lägg till en behörighet.

  4. Välj de API:er som min organisation använder på-fliken.

  5. I listan över API:er väljer du API:et, till exempel ciam-ToDoList-api.

  6. Välj alternativet Programbehörigheter. Vi väljer det här alternativet eftersom appen loggar in som sig själv, men inte för en användares räkning.

  7. I behörighetslistan väljer du TodoList.Read.All, ToDoList.ReadWrite.All (använd sökrutan om det behövs).

  8. Välj knappen Lägg till behörigheter.

  9. Nu har du tilldelat behörigheterna korrekt. Men eftersom daemon-appen inte tillåter användare att interagera med den, kan användarna själva inte samtycka till dessa behörigheter. För att lösa det här problemet måste du som administratör samtycka till dessa behörigheter för alla användare i klientorganisationen:

    1. Välj Bevilja administratörsmedgivande för <ditt klientnamn>och välj sedan Ja.
    2. Välj Uppdateraoch kontrollera sedan att Beviljas för <ditt klientnamn> visas under Status för båda behörigheterna.

Klona eller ladda ned exempel på daemonprogram och webb-API

Om du vill hämta exempelprogrammet kan du antingen klona det från GitHub eller ladda ned det som en .zip fil.

  • Om du vill klona exemplet öppnar du en kommandotolk och navigerar till den platsen där du vill skapa projektet och anger följande kommando:

    git clone https://github.com/Azure-Samples/ms-identity-ciam-javascript-tutorial.git
    
  • Du kan också ladda ned exemplet .zip filoch sedan extrahera det till en filsökväg där namnlängden är färre än 260 tecken.

Installera projektberoenden

  1. Öppna ett konsolfönster och ändra till katalogen som innehåller Node.js exempelappen:

    cd 2-Authorization\3-call-api-node-daemon\App
    
  2. Kör följande kommandon för att installera appberoenden:

    npm install && npm update
    

Konfigurera exempel daemonappen och API:et

Använd följande steg för att använda din appregistreringsinformation i klientwebbappexemplet:

  1. Öppna App\authConfig.js fil i kodredigeraren.

  2. Hitta platshållaren:

    • Enter_the_Application_Id_Here och ersätt det med program-ID:t (klient) för den daemonapp som du registrerade tidigare.

    • Ersätt Enter_the_Tenant_Subdomain_Here med subdomänen för katalog (tenant/klientorganisation). Om din primära klientdomän till exempel är contoso.onmicrosoft.comanvänder du contoso. Om du inte har ditt klientnamn kan du lära dig hur du läser klientinformationen.

    • Enter_the_Client_Secret_Here och ersätt det med det daemon-apphemlighetsvärde som du kopierade tidigare.

    • Enter_the_Web_Api_Application_Id_Here och ersätt det med program-ID(klient)-ID:t för webb-API:et som du kopierade tidigare.

Så här använder du din appregistrering i webb-API-exemplet:

  1. Öppna API\ToDoListAPI\appsettings.json fil i kodredigeraren.

  2. Hitta platshållaren:

    • Enter_the_Application_Id_Here och ersätt det med program-ID:t (klient) för webb-API:et som du kopierade.

    • Enter_the_Tenant_Id_Here och ersätt det med det katalog-ID (klientorganisation) som du kopierade tidigare.

    • Enter_the_Tenant_Subdomain_Here och ersätt den med underdomänen i katalogen (tenant). Om din primära klientdomän till exempel är contoso.onmicrosoft.comanvänder du contoso. Om du inte har ditt klientnamn, lär dig hur du läser klientinformationen.

Kör och testa daemon-exempelappen och API:et

Du har konfigurerat exempelappen. Du kan fortsätta att köra och testa den.

  1. Öppna ett konsolfönster och kör sedan webb-API:et med hjälp av följande kommandon:

    cd 2-Authorization\3-call-api-node-daemon\API\ToDoListAPI
    dotnet run
    
  2. Kör webbappsklienten med hjälp av följande kommandon:

    2-Authorization\3-call-api-node-daemon\App
    node . --op getToDos
    

Om daemonappen och webb-API:et körs bör du se något som liknar följande JSON-matris i konsolfönstret

{
    "id": 1,
    "owner": "3e8....-db63-43a2-a767-5d7db...",
    "description": "Pick up grocery"
},
{
    "id": 2,
    "owner": "c3cc....-c4ec-4531-a197-cb919ed.....",
    "description": "Finish invoice report"
},
{
    "id": 3,
    "owner": "a35e....-3b8a-4632-8c4f-ffb840d.....",
    "description": "Water plants"
}

Så här fungerar det

Node.js-appen använder OAuth 2.0-klientuppgifter beviljandeflöde för att hämta en åtkomsttoken för egen del och inte för användaren. Åtkomsttoken som appen begär innehåller de behörigheter som representeras som roller. Klientautentiseringsflödet använder den här uppsättningen behörigheter i stället för användaromfattningar för programtoken. Du tidigare exponerat dessa programbehörigheter i webb-API:et och sedan beviljat dem till daemonappen.

På API-sidan, ett .NET-exempelwebb-API, måste API:et kontrollera att åtkomsttoken har de behörigheter som krävs (programbehörigheter). Webb-API:et kan inte acceptera en åtkomsttoken som inte har de behörigheter som krävs.

Åtkomst till data

En webb-API-slutpunkt bör vara beredd att acceptera anrop från både användare och program. Därför bör den ha ett sätt att svara på varje begäran i enlighet med detta. Ett anrop från en användare via delegerade behörigheter/omfång tar till exempel emot användarens data to-do lista. Å andra sidan kan ett anrop från ett program via programbehörigheter/roller få hela to-do listan. Men i den här artikeln gör vi bara ett programanrop, så vi behövde inte konfigurera delegerade behörigheter/omfång.