Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för: arbetskraftshyresgäster
externa hyresgäster (läs mer)
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
- Ett Azure-konto med en aktiv prenumeration. Om du inte redan har ett Skapa ett konto kostnadsfritt.
- Det här Azure-kontot måste ha behörighet att hantera program. Någon av följande Microsoft Entra-roller innehåller de behörigheter som krävs:
- Appadministratör
- Programutvecklare
- Molnprogramadministratör
- En hyresgäst för arbetskraft. Du kan använda din standardkatalog eller konfigurera en ny klientorganisation.
- Registrera en ny app i administrationscentret för Microsoft Entra, som endast konfigurerats för konton i den här organisationskatalogen. Mer information finns i Registrera ett program . Registrera följande värden från programöversiktssidan för senare användning:
- App-ID (klient-ID)
- Katalog-ID (hyresgäst)
- Lägg till en klienthemlighet i din appregistrering. Använd inte klienthemligheter i produktionsappar. Använd certifikat eller federerade autentiseringsuppgifter i stället. Mer information finns i lägga till autentiseringsuppgifter i ditt program.
- Ett minimikrav för .NET 6.0 SDK.
- Visual Studio 2022 eller Visual Studio Code.
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 filnamnets längd är kortare än 260 tecken.
Konfigurera projektet
Använd följande steg för att använda din appregistreringsinformation i exempelprogrammet för klientdaemon:
Öppna ett konsolfönster och navigera sedan till katalogen ms-identity-docs-code-dotnet/console-daemon:
cd ms-identity-docs-code-dotnet/console-daemon
Ö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 Microsoft 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
– Auktoriteten är en URL som anger en mapp som MSAL kan begära tokens 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 detApplication (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 detObject 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.
Relaterat innehåll
Lär dig genom att skapa den här ASP.NET webbappen med serien Självstudie: Registrera ett program med Microsofts identitetsplattform.
snabbstart: Distribuera en ASP.NET webbapp till Azure App Service
Förutsättningar
- Ett Azure-konto med en aktiv prenumeration. Om du inte redan har ett Skapa ett konto kostnadsfritt.
- Det här Azure-kontot måste ha behörighet att hantera program. Någon av följande Microsoft Entra-roller innehåller de behörigheter som krävs:
- Appadministratör
- Programutvecklare
- Molnprogramadministratör
- En extern hyresgäst. Om du vill skapa en väljer du mellan följande metoder:
- (Rekommenderas) Använd Externt ID-tillägg för Microsoft Entra för att konfigurera ett externt hyresgästkonto direkt i Visual Studio Code.
- Skapa en ny extern hyresgäst i administrationscentret för Microsoft Entra.
- Registrera en ny app i administrationscentret för Microsoft Entra med följande konfiguration. Mer information finns i Registrera ett program.
- Namn: ciam-daemon-app
- kontotyper som stöds: endast konton i den här organisationskatalogen (enskild klientorganisation)
- Visual Studio Code eller någon annan kodredigerare.
- .NET 7.0 eller senare.
- Node.js (endast för nodimplementering)
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:
- På sidan Appregistreringar väljer du det program som du skapade (till exempel webbappens klienthemlighet) för att öppna sidan Översikt.
- Under Hanteraväljer du Certifikat & hemligheter>Klienthemligheter>Ny klienthemlighet.
- I rutan Beskrivning anger du en beskrivning av klienthemligheten (till exempel webbappens klienthemlighet).
- Under Upphörväljer du en varaktighet för vilken hemligheten är giltig (enligt organisationens säkerhetsregler) och väljer sedan Lägg till.
- 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
På sidan Appregistreringar väljer du det program som du skapade, till exempel ciam-client-app.
Under Hanteraväljer du API-behörigheter.
Under Konfigurerade behörigheterväljer du Lägg till en behörighet.
Välj de API:er som min organisation använder på-fliken.
I listan över API:er väljer du API:et, till exempel ciam-ToDoList-api.
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.
I behörighetslistan väljer du TodoList.Read.All, ToDoList.ReadWrite.All (använd sökrutan om det behövs).
Välj knappen Lägg till behörigheter.
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:
- Välj Bevilja administratörsmedgivande för <ditt klientnamn>och välj sedan Ja.
- Välj Uppdateraoch kontrollera sedan att Beviljas för <ditt klientnamn> visas under Status för båda behörigheterna.
Konfigurera app-roller
Ett API måste publicera minst en apputvecklarroll för applikationer, även kallat Programbehörighet, för att klientapparna ska få en åtkomsttoken i sin egen rätt. 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:
På sidan Appregistreringar väljer du det program som du skapade (till exempel ciam-ToDoList-api) för att öppna sidan Översikt.
Under Hanteraväljer du Applikationsroller.
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" Vill du aktivera den här rollen för appen? Låt det vara ikryssat 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 AttGöraLista.LäsSkriv.Allt Beskrivning Tillåt att appen läser och skriver alla användares ToDo-lista med hjälp av "ToDoListApi" Vill du aktivera den här rollen för appen? Låt det vara ikryssat
Konfigurera valfria anspråk
Du kan lägga till det valfria idtyp-anspråket för att hjälpa webb-API att avgöra om en token är en app-token eller en app-och-användar-token . Ä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 app-endast token.
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
Öppna ett konsolfönster och ändra till katalogen som innehåller Node.js exempelappen:
cd 2-Authorization\3-call-api-node-daemon\App
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:
Öppna
App\authConfig.js
fil i kodredigeraren.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 ärcontoso.onmicrosoft.com
använder ducontoso
. 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:
Öppna
API\ToDoListAPI\appsettings.json
fil i kodredigeraren.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.Ersätt
Enter_the_Tenant_Subdomain_Here
med subdomänen för katalog (tenant/klientorganisation). Om din primära klientdomän till exempel ärcontoso.onmicrosoft.com
använder ducontoso
. Om du inte har ditt klientnamn kan du lära 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.
Ö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
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 eller roller få hela att-göra-listan. Men i den här artikeln gör vi bara ett programanrop, så vi behövde inte konfigurera delegerade behörigheter/omfång.