Självstudie: Skapa en daemon för flera klientorganisationer som använder Microsoft platforma za identitete
I den här självstudien laddar du ned och kör en ASP.NET daemon-webbapp som visar hur du använder OAuth 2.0-klientautentiseringsuppgifterna för att hämta en åtkomsttoken för att anropa Microsoft Graph API.
I den här självstudien:
- Integrera en daemonapp med Microsoft platforma za identitete
- Bevilja programbehörigheter direkt till appen av en administratör
- Hämta en åtkomsttoken för att anropa Microsoft Graph API
- Anropa Microsoft Graph API.
Om du inte har någon Azure-prenumeration skapar du ett kostnadsfritt konto innan du börjar.
Förutsättningar
- Visual Studio 2017 eller 2019.
- En Microsoft Entra-klientorganisation. Mer information finns i Hämta en Microsoft Entra-klientorganisation.
- Ett eller flera användarkonton i din klientorganisation. Det här exemplet fungerar inte med ett Microsoft-konto. Om du har loggat in med ett Microsoft-konto och aldrig har skapat ett användarkonto i din katalog gör du det nu.
Scenario
Appen skapas som ett ASP.NET MVC-program. Den använder OWIN OpenID Connect-mellanprogrammet för att logga in användare.
Komponenten "daemon" i det här exemplet är en API-kontrollant, SyncController.cs
. När kontrollanten anropas hämtas en lista över användare i kundens Microsoft Entra-klientorganisation från Microsoft Graph. SyncController.cs
utlöses av ett AJAX-anrop i webbprogrammet. Den använder Microsoft Authentication Library (MSAL) för .NET för att hämta en åtkomsttoken för Microsoft Graph.
Eftersom appen är en app med flera klientorganisationer för Microsoft-företagskunder måste den vara ett sätt för kunder att "registrera sig" eller "ansluta" programmet till sina företagsdata. Under anslutningsflödet beviljar en programutvecklare först programbehörighet direkt till appen så att den kan komma åt företagsdata på ett icke-interaktivt sätt, utan att det finns någon inloggad användare. Merparten av logiken i det här exemplet visar hur du uppnår det här anslutningsflödet med hjälp av identitetsplattformens slutpunkt för administratörsmedgivande.
Mer information om de begrepp som används i det här exemplet finns i dokumentationen om protokoll för klientautentiseringsuppgifter för identitetsplattformen.
Klona eller ladda ned den här lagringsplatsen
Från gränssnittet eller kommandoraden anger du följande kommando:
git clone https://github.com/Azure-Samples/active-directory-dotnet-daemon-v2.git
Eller ladda ned exemplet i en zip-fil.
Registrera ditt program
Det här exemplet har ett projekt. Om du vill registrera programmet med din Microsoft Entra-klientorganisation kan du antingen:
- Följ stegen i Välj klientorganisation och Konfigurera exemplet för att använda din klientorganisation.
- Använd PowerShell-skript som:
- Skapa automatiskt Microsoft Entra-program och relaterade objekt (lösenord, behörigheter, beroenden) åt dig.
- Ändra konfigurationsfilerna för Visual Studio-projekt.
Om du vill använda automatiseringen:
Kör PowerShell i Windows och gå till roten för den klonade katalogen.
Kör följande kommando:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process -Force
Kör skriptet för att skapa ditt Microsoft Entra-program och konfigurera koden för exempelprogrammet i enlighet med detta:
.\AppCreationScripts\Configure.ps1
Andra sätt att köra skript beskrivs i skript för att skapa appar.
Öppna Visual Studio-lösningen och välj Starta för att köra koden.
Om du inte vill använda automatiseringen använder du stegen i följande avsnitt.
Välj klientorganisation
Dricks
Stegen i den här artikeln kan variera något beroende på vilken portal du börjar från.
Logga in på administrationscentret för Microsoft Entra som minst programutvecklare.
Om du har åtkomst till flera klienter använder du ikonen Inställningar på den översta menyn för att växla till den klientorganisation där du vill registrera programmet från menyn Kataloger + prenumerationer.
Bläddra till Appregistreringar för identitetsprogram>>.
Välj Ny registrering.
Ange ett namn för ditt program, till exempel
dotnet-web-daemon-v2
. Användare av din app kan se det här namnet och du kan ändra det senare.I avsnittet Kontotyper som stöds väljer du Konton i valfri organisationskatalog.
I avsnittet Omdirigerings-URI (valfritt) väljer du Webb i kombinationsrutan och anger
https://localhost:44316/
ochhttps://localhost:44316/Account/GrantPermissions
som Omdirigerings-URI:er.Om det finns fler än två omdirigerings-URI:er måste du lägga till dem från fliken Autentisering senare när appen har skapats.
Välj Registrera för att skapa programmet.
På appens översiktssida hittar du värdet program-ID (klient) och registrerar det för senare användning. Du behöver den för att konfigurera Visual Studio-konfigurationsfilen för det här projektet.
Under Hantera väljer du Autentisering.
Ange URL för utloggning i Front-channel till
https://localhost:44316/Account/EndSession
.I avsnittet Implicit beviljande och hybridflöden väljer du Åtkomsttoken och ID-token. Det här exemplet kräver att det implicita beviljandeflödet aktiveras för att logga in användaren och anropa ett API.
Välj Spara.
Under Hantera väljer du Certifikat och hemligheter.
Under avsnittet Klienthemlighet välj Ny klienthemlighet.
Ange en nyckelbeskrivning (till exempel apphemlighet).
Välj en nyckelvaraktighet på antingen Om ett år, Om två år eller Aldrig upphör att gälla.
Markera Lägga till. Registrera nyckelvärdet på en säker plats. Du behöver den här nyckeln senare för att konfigurera projektet i Visual Studio.
Under Hantera väljer du API-behörigheter>Lägg till en behörighet.
I avsnittet Vanliga Microsoft-API:er väljer du Microsoft Graph.
I avsnittet Programbehörigheter kontrollerar du att rätt behörigheter är markerade: User.Read.All.
Välj Lägg till behörigheter.
Konfigurera exemplet för att använda din klientorganisation
I följande steg är ClientID detsamma som "program-ID" eller AppId.
Öppna lösningen i Visual Studio för att konfigurera projekten.
Konfigurera klientprojektet
Om du använde installationsskripten har följande ändringar tillämpats åt dig.
- Öppna filen UserSync\Web.Config.
- Hitta appnyckeln ida:ClientId. Ersätt det befintliga värdet med program-ID:t för dotnet-web-daemon-v2-programmet som tidigare spelades in.
- Hitta appnyckeln ida:ClientSecret. Ersätt det befintliga värdet med nyckeln som du sparade när du skapade appen dotnet-web-daemon-v2 .
Kör exemplet
Rensa lösningen, återskapa lösningen, kör UserSync-programmet och logga sedan in som administratör i din Microsoft Entra-klientorganisation. Om du inte har någon Microsoft Entra-klient för testning kan du följa dessa instruktioner för att hämta en.
När du loggar in ber appen dig först om behörighet att logga in och läsa din användarprofil. Med det här medgivandet kan appen se till att du är en företagsanvändare.
Appen försöker sedan synkronisera en lista över användare från din Microsoft Entra-klientorganisation via Microsoft Graph. Om det inte går ber den dig (klientadministratören) att ansluta din klientorganisation till appen.
Appen ber sedan om behörighet att läsa listan över användare i din klientorganisation.
När du har beviljat behörighet loggas du ut från appen. Den här utloggningen säkerställer att alla befintliga åtkomsttoken för Microsoft Graph tas bort från tokencachen. När du loggar in igen har den nya token som hämtas de behörigheter som krävs för att göra anrop till Microsoft Graph.
När du beviljar behörigheten kan appen sedan fråga efter användare när som helst. Du kan kontrollera detta genom att välja knappen Synkronisera användare och uppdatera listan över användare. Prova att lägga till eller ta bort en användare och synkronisera om listan. (Observera dock att appen endast synkroniserar den första sidan med användare.)
Om koden
Relevant kod för det här exemplet finns i följande filer:
- App_Start\Startup.Auth.cs, Controllers\AccountController.cs: Inledande inloggning. I synnerhet har åtgärderna på kontrollanten ett auktorisera-attribut , vilket tvingar användaren att logga in. Programmet använder auktoriseringskodflödet för att logga in användaren.
- Controllers\SyncController.cs: Synkroniserar listan över användare till det lokala minnesinterna arkivet.
- Controllers\UserController.cs: Visar listan över användare från det lokala minnesinterna arkivet.
- Controllers\AccountController.cs: Hämta behörigheter från klientadministratören med hjälp av slutpunkten för administratörsmedgivande.
Återskapa exempelappen
- I Visual Studio skapar du ett nytt Visual C#-projekt ASP.NET Web Application (.NET Framework).
- På nästa skärm väljer du MVC-projektmallen. Lägg även till mapp- och kärnreferenser för webb-API eftersom du lägger till en webb-API-kontrollant senare. Lämna projektets valda autentiseringsläge som standard: Ingen autentisering.
- Välj projektet i fönstret Istraživač rešenja och välj nyckeln F4.
- I projektegenskaperna anger du SSL Enabled till True. Observera informationen i SSL-URL:en. Du behöver det när du konfigurerar programmets registrering i Azure-portalen.
- Lägg till följande ASP.NET OWIN-mellanprograms NuGet-paket:
- Microsoft.Owin.Security.ActiveDirectory
- Microsoft.Owin.Security.Cookies
- Microsoft.Owin.Host.SystemWeb
- Microsoft.IdentityModel.Protocol.Extensions
- Microsoft.Owin.Security.OpenIdConnect
- Microsoft.Identity.Client
- I mappen App_Start :
- Skapa en klass med namnet Startup.Auth.cs.
- Ta bort . App_Start från namnområdesnamnet.
- Ersätt koden för startklassen med koden från samma fil i exempelappen. Se till att ta hela klassdefinitionen. Definitionen ändras från offentlig klassstart till offentlig partiell klassstart.
- I Startup.Auth.cs löser du saknade referenser genom att lägga till med hjälp av instruktioner som föreslås av Visual Studio IntelliSense.
- Högerklicka på projektet, välj Lägg till och välj sedan Klass.
- I sökrutan anger du OWIN. OWIN Startup-klassen visas som ett val. Välj den och ge klassen namnet Startup.cs.
- I Startup.cs ersätter du koden för startklassen med koden från samma fil i exempelappen. Observera återigen att definitionen ändras från offentlig klassstart till offentlig partiell klassstart.
- I mappen Modeller lägger du till en ny klass med namnet MsGraphUser.cs. Ersätt implementeringen med innehållet i filen med samma namn från exemplet.
- Lägg till en ny MVC 5-styrenhet – tom instans med namnet AccountController. Ersätt implementeringen med innehållet i filen med samma namn från exemplet.
- Lägg till en ny MVC 5-styrenhet – tom instans med namnet UserController. Ersätt implementeringen med innehållet i filen med samma namn från exemplet.
- Lägg till en ny Web API 2-kontrollant – tom instans med namnet SyncController. Ersätt implementeringen med innehållet i filen med samma namn från exemplet.
- För användargränssnittet i mappen Views\Account lägger du till tre tomma (utan modell) Views-instanser med namnet GrantPermissions, Index och UserMismatch. Lägg till och ett med namnet Index i mappen Views\User . Ersätt implementeringen med innehållet i filen med samma namn från exemplet.
- Uppdatera Shared_Layout.cshtml och Home\Index.cshtml för att länka ihop de olika vyerna korrekt.
Distribuera exemplet till Azure
Det här projektet har webbapps- och webb-API-projekt. Utför följande steg för var och en för att distribuera dem till Azure-webbplatser:
- Skapa en Azure-webbplats.
- Publicera webbappen och webb-API:erna på webbplatsen.
- Uppdatera klienter för att anropa webbplatsen i stället för IIS Express.
Skapa och publicera dotnet-web-daemon-v2 på en Azure-webbplats
- Logga in på Azure-portalen.
- Välj Skapa en resurs i det övre vänstra hörnet.
- Välj Webbapp> och ge sedan webbplatsen ett namn. Ge den till exempel namnet dotnet-web-daemon-v2-contoso.azurewebsites.net.
- Välj information för Prenumeration, Resursgrupp och App Service-plan och plats. Operativsystemet är Windows och Publicera är Kod.
- Välj Skapa och vänta tills apptjänsten har skapats.
- När du får meddelandet Distributionen lyckades väljer du Gå till resurs för att gå till den nyligen skapade apptjänsten.
- När webbplatsen har skapats letar du reda på den på instrumentpanelen och väljer den för att öppna apptjänstens översiktsskärm.
- På fliken Översikt i apptjänsten laddar du ned publiceringsprofilen genom att välja länken Hämta publiceringsprofil och spara den. Du kan använda andra distributionsmekanismer, till exempel distribution från källkontroll.
- Växla till Visual Studio och sedan:
- Gå till projektet dotnet-web-daemon-v2 .
- Högerklicka på projektet i Istraživač rešenja och välj sedan Publicera.
- Välj Importera profil i det nedre fältet och importera den publiceringsprofil som du laddade ned tidigare.
- Välj Konfigurera.
- På fliken Anslutning uppdaterar du mål-URL:en så att den använder "https". Använd till exempel
https://dotnet-web-daemon-v2-contoso.azurewebsites.net
. Välj Nästa. - På fliken Inställningar kontrollerar du att Aktivera organisationsautentisering är avmarkerat.
- Välj Spara. Välj Publicera på huvudskärmen.
Visual Studio publicerar projektet och öppnar automatiskt en webbläsare till projektets URL. Om du ser projektets standardwebbsida lyckades publikationen.
Uppdatera microsoft Entra-klientprogrammets registrering för dotnet-web-daemon-v2
- Gå tillbaka till administrationscentret för Microsoft Entra och välj sedan programmet dotnet-web-daemon-v2 i Appregistreringar.
- På sidan Autentisering för ditt program uppdaterar du url-fälten för utloggning i Front-channel med adressen till din tjänst. Använd till exempel
https://dotnet-web-daemon-v2-contoso.azurewebsites.net/Account/EndSession
. - Från menyn Varumärkesanpassning uppdaterar du webbadressen till startsidan till adressen till din tjänst. Använd till exempel
https://dotnet-web-daemon-v2-contoso.azurewebsites.net
. - Spara konfigurationen.
- Lägg till samma URL i listan med värden i menyn Autentiseringsomdirigerings-URI>:er. Om du har flera omdirigerings-URL:er kontrollerar du att det finns en ny post som använder apptjänstens URI för varje omdirigerings-URL.
Rensa resurser
När det inte längre behövs tar du bort appobjektet som du skapade i steget Registrera ditt program . Om du vill ta bort programmet följer du anvisningarna i Ta bort ett program som skapats av dig eller din organisation.
Få hjälp
Använd Microsoft Q&A för att få support från communityn.
Ställ dina frågor om Microsoft Q&A först och bläddra bland befintliga problem för att se om någon har ställt din fråga tidigare.
Kontrollera att dina frågor eller kommentarer är taggade med azure-ad-adal-deprecation
, azure-ad-msal
och dotnet-standard
.
Om du hittar en bugg i exemplet genererar du problemet på GitHub-problem.
Om du hittar en bugg i MSAL.NET kan du ta upp problemet i MSAL.NET GitHub-problem.
Om du vill ge en rekommendation går du till sidan Användarröst.
Nästa steg
Läs mer om att skapa daemonappar som använder Microsoft platforma za identitete för att få åtkomst till skyddade webb-API:er: