Snabbstart: Logga in användare och anropa Microsoft Graph API från en ASP.NET webbapp
I den här snabbstarten laddar du ned och kör ett kodexempel som visar ett ASP.NET webbprogram som kan logga in användare med Microsoft Entra-konton.
Se Så här fungerar exemplet för en bild.
Förutsättningar
- Ett Azure-konto med en aktiv prenumeration. Skapa ett konto utan kostnad.
- Visual Studio 2022
- .NET Framework 4.7.2+
Registrera och ladda ned appen
Dricks
Stegen i den här artikeln kan variera något beroende på vilken portal du börjar från.
Du har två alternativ för att börja skapa ditt program: automatisk eller manuell konfiguration.
Automatisk konfiguration
Om du vill konfigurera appen automatiskt och sedan ladda ned kodexemplet följer du dessa steg:
- Logga in på microsoft Entra-administrationscentrets snabbstartsupplevelse som minst molnprogramadministratör.
- Ange ett namn för programmet och välj Registrera.
- Följ anvisningarna för att ladda ned och konfigurera det nya programmet automatiskt med ett klick.
Manuell konfiguration
Om du vill konfigurera programmet och kodexemplet manuellt använder du följande procedurer.
Steg 1: Registrera din app
- Logga in på administrationscentret för Microsoft Entra som minst molnprogramadministratör.
- 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>>och välj Ny registrering.
- Som Namn anger du ett namn för ditt program. Ange till exempel ASPNET-Snabbstart. Användare av din app ser det här namnet och du kan ändra det senare.
- Ange omdirigerings-URI-typen till Webb och värdet till
https://localhost:44368/
. - Välj Registrera.
- Under Hantera väljer du Autentisering.
- I avsnittet Implicit beviljande och hybridflöden väljer du ID-token.
- Välj Spara.
Steg 2: Ladda ned projektet
Ladda ned kodexemplet för ASP.NET
Dricks
För att undvika fel som orsakas av sökvägslängdsbegränsningar i Windows rekommenderar vi att du extraherar arkivet eller klonar lagringsplatsen till en katalog nära roten på enheten.
Steg 3: Kör projektet
Extrahera .zip-filen till en lokal mapp som är nära rotmappen. Du kan till exempel extrahera till C:\Azure-Samples.
Vi rekommenderar att du extraherar arkivet till en katalog nära roten på enheten för att undvika fel som orsakas av sökvägslängdsbegränsningar i Windows.
Öppna lösningen i Visual Studio (AppModelv2-WebApp-OpenIDConnect-DotNet.sln).
Beroende på versionen av Visual Studio kan du behöva högerklicka på projektet AppModelv2-WebApp-OpenIDConnect-DotNet och sedan välja Återställ NuGet-paket.
Öppna Upravljač za pakete-konsolen genom att välja Visa>andra Windows> Upravljač za pakete-konsolen. Kör sedan
Update-Package
.Redigera appsettings.json och ersätt parametrarna
ClientId
,Tenant
ochredirectUri
med:"ClientId" :"Enter_the_Application_Id_here" /> "TenantId": "Enter_the_Tenant_Info_Here" /> "RedirectUri" :"https://localhost:44368/" />
I den koden:
Enter_the_Application_Id_here
är program-ID:t (klient) för appregistreringen som du skapade tidigare. Hitta program-ID:t (klient) på appens översiktssida i Appregistreringar i administrationscentret för Microsoft Entra.Enter_the_Tenant_Info_Here
är ett av följande alternativ:- Om ditt program endast stöder Min organisation ersätter du det här värdet med katalog-ID:t eller klientorganisationens namn (till exempel
contoso.onmicrosoft.com
). Hitta katalog-ID:t (klientorganisation) på appens översiktssida i Appregistreringar i administrationscentret för Microsoft Entra. - Om ditt program stöder Konton i en organisationskatalog ersätter du det här värdet med
organizations
. - Om ditt program stöder Alla Microsoft-kontoanvändare ersätter du det här värdet med
common
.
- Om ditt program endast stöder Min organisation ersätter du det här värdet med katalog-ID:t eller klientorganisationens namn (till exempel
redirectUri
är den omdirigerings-URI som du angav tidigare i Appregistreringar i administrationscentret för Microsoft Entra.
Mer information
Det här avsnittet ger en översikt över den kod som krävs för att logga in användare. Den här översikten kan vara användbar för att förstå hur koden fungerar, vad huvudargumenten är och hur du lägger till inloggning i ett befintligt ASP.NET program.
Så här fungerar exemplet
OWIN-mellanprogrammets NuGet-paket
Du kan konfigurera autentiseringspipelinen med cookiebaserad autentisering med hjälp av OpenID Connect i ASP.NET med OWIN-mellanprogramspaket. Du kan installera dessa paket genom att köra följande kommandon i Upravljač za pakete Console i Visual Studio:
Install-Package Microsoft.Identity.Web.Owin
Install-Package Microsoft.Identity.Web.GraphServiceClient
Install-Package Microsoft.Owin.Security.Cookies
OWIN-startklass
OWIN-mellanprogrammet använder en startklass som körs när värdprocessen startar. I den här snabbstarten finns startup.cs-filen i rotmappen. Följande kod visar de parametrar som används i den här snabbstarten:
public void Configuration(IAppBuilder app)
{
app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
app.UseCookieAuthentication(new CookieAuthenticationOptions());
OwinTokenAcquirerFactory factory = TokenAcquirerFactory.GetDefaultInstance<OwinTokenAcquirerFactory>();
app.AddMicrosoftIdentityWebApp(factory);
factory.Services
.Configure<ConfidentialClientApplicationOptions>(options => { options.RedirectUri = "https://localhost:44368/"; })
.AddMicrosoftGraph()
.AddInMemoryTokenCaches();
factory.Build();
}
Där | beskrivning |
---|---|
ClientId |
Program-ID:t från programmet som registrerats i Azure-portalen. |
Authority |
StS-slutpunkten (Security Token Service) som användaren kan autentisera. Det är vanligtvis https://login.microsoftonline.com/{tenant}/v2.0 för det offentliga molnet. I den URL:en är {tenant} namnet på din klientorganisation, ditt klient-ID eller common för en referens till den gemensamma slutpunkten. (Den gemensamma slutpunkten används för program med flera klienter.) |
RedirectUri |
URL:en där användare skickas efter autentisering mot Microsoft platforma za identitete. |
PostLogoutRedirectUri |
URL:en där användare skickas efter signering. |
Scope |
Listan över omfång som begärs, avgränsade med blanksteg. |
ResponseType |
Begäran om att svaret från autentiseringen innehåller en auktoriseringskod och en ID-token. |
TokenValidationParameters |
En lista över parametrar för tokenvalidering. I det här fallet ValidateIssuer är inställt på att false indikera att det kan acceptera inloggningar från alla personliga konto-, arbets- eller skolkontotyper. |
Notifications |
En lista över ombud som kan köras på OpenIdConnect meddelanden. |
Autentiseringsutmaning
Du kan tvinga en användare att logga in genom att begära en autentiseringsfråga i kontrollanten:
public void SignIn()
{
if (!Request.IsAuthenticated)
{
HttpContext.GetOwinContext().Authentication.Challenge(
new AuthenticationProperties{ RedirectUri = "/" },
OpenIdConnectAuthenticationDefaults.AuthenticationType);
}
}
Dricks
Det är valfritt att begära en autentiseringsutmaning med den här metoden. Du använder den normalt när du vill att en vy ska vara tillgänglig för både autentiserade och oautentiserade användare. Du kan också skydda kontrollanter med hjälp av metoden som beskrivs i nästa avsnitt.
Attribut för att skydda en kontrollant eller en kontrollantåtgärd
Du kan skydda en kontrollant eller kontrollantåtgärder med hjälp av attributet [Authorize]
. Det här attributet begränsar åtkomsten till kontrollanten eller åtgärder genom att endast autentiserade användare får åtkomst till åtgärderna i kontrollanten. En autentiseringsutmaning sker sedan automatiskt när en oautentiserad användare försöker komma åt någon av de åtgärder eller kontrollanter som är dekorerade med [Authorize]
attributet.
Anropa Microsoft Graph från kontrollanten
Du kan anropa Microsoft Graph från kontrollanten genom att hämta instansen av GraphServiceClient med hjälp GetGraphServiceClient
av tilläggsmetoden på kontrollanten, som i följande kod:
try
{
var me = await this.GetGraphServiceClient().Me.GetAsync();
ViewBag.Username = me.DisplayName;
}
catch (ServiceException graphEx) when (graphEx.InnerException is MicrosoftIdentityWebChallengeUserException)
{
HttpContext.GetOwinContext().Authentication.Challenge(OpenIdConnectAuthenticationDefaults.AuthenticationType);
return View();
}
Hjälp och support
Om du behöver hjälp, vill rapportera ett problem eller vill lära dig mer om dina supportalternativ kan du läsa Hjälp och support för utvecklare.
Nästa steg
Om du vill ha en fullständig steg-för-steg-guide om hur du skapar program och nya funktioner, inklusive en fullständig förklaring av den här snabbstarten, kan du prova ASP.NET självstudien.