Inleiding tot ASP.NET identiteit
Het ASP.NET lidmaatschapssysteem is geïntroduceerd met ASP.NET 2.0 in 2005 en sindsdien zijn er veel wijzigingen aangebracht in de manier waarop webtoepassingen doorgaans verificatie en autorisatie verwerken. ASP.NET Identity is een nieuw overzicht van wat het lidmaatschapssysteem moet zijn wanneer u moderne toepassingen voor internet, telefoon of tablet bouwt.
We raden u aan de veiligste veilige verificatieoptie te gebruiken. Zie voor .NET-apps die zijn geïmplementeerd in Azure:
Azure Key Vault en .NET Aspire bieden de veiligste manier om geheimen op te slaan en op te halen. Azure Key Vault is een cloudservice waarmee versleutelingssleutels en geheimen, zoals certificaten, verbindingsreeksen en wachtwoorden, worden beschermd. Zie voor .NET Aspire Beveiligde communicatie tussen hosting en clientintegraties.
Vermijd Toestemming voor Wachtwoordinvoer door Resource-eigenaar, omdat het om de volgende redenen problematisch is:
- Stelt het wachtwoord van de gebruiker beschikbaar voor de client.
- Is een aanzienlijk beveiligingsrisico.
- Mag alleen worden gebruikt wanneer andere verificatiestromen niet mogelijk zijn.
Wanneer de app wordt geïmplementeerd op een testserver, kan een omgevingsvariabele worden gebruikt om de verbindingsreeks in te stellen op een testdatabaseserver. Omgevingsvariabelen worden over het algemeen opgeslagen in niet-versleutelde tekst. Als de machine of het proces is aangetast, kunnen omgevingsvariabelen worden geopend door niet-vertrouwde partijen. Wij raden af om omgevingsvariabelen te gebruiken om een productieverbindingsreeks op te slaan, omdat dit niet de veiligste benadering is.
Richtlijnen voor configuratiegegevens:
- Sla nooit wachtwoorden of andere gevoelige gegevens op in configuratieprovidercode of in configuratiebestanden met tekst zonder opmaak.
- Gebruik geen productiegeheimen in ontwikkel- of testomgevingen.
- Geef geheimen buiten het project op, zodat ze niet per ongeluk kunnen worden doorgevoerd in een opslagplaats met broncode.
Achtergrond: Lidmaatschap van ASP.NET
ASP.NET lidmaatschap
ASP.NET lidmaatschap is ontworpen om vereisten voor sitelidmaatschappen op te lossen die in 2005 gebruikelijk waren, waarbij Formulierenverificatie werd gebruikt en een SQL Server-database voor gebruikersnamen, wachtwoorden en profielgegevens. Tegenwoordig is er een veel breder scala aan opties voor gegevensopslag voor webtoepassingen, en de meeste ontwikkelaars willen hun sites in staat stellen om sociale id-providers te gebruiken voor verificatie- en autorisatiefunctionaliteit. De beperkingen van het ontwerp van ASP.NET Lidmaatschap maken deze overgang moeilijk:
- Het databaseschema is ontworpen voor SQL Server en u kunt het niet wijzigen. U kunt profielgegevens toevoegen, maar de aanvullende gegevens worden in een andere tabel verpakt, waardoor het moeilijk is om toegang te krijgen via elke manier, behalve via de API van de profielprovider.
- Met het providersysteem kunt u het backing-gegevensarchief wijzigen, maar het systeem is ontworpen rond veronderstellingen die geschikt zijn voor een relationele database. U kunt een provider schrijven om lidmaatschapsgegevens op te slaan in een niet-relationeel opslagmechanisme, zoals Azure Storage-tabellen, maar u moet het relationele ontwerp omzeilen door veel code en veel
System.NotImplementedException
uitzonderingen te schrijven voor methoden die niet van toepassing zijn op NoSQL-databases. - Omdat de functionaliteit voor aanmelden/afmelden is gebaseerd op formulierverificatie, kan het lidmaatschapssysteem geen gebruik maken van OWIN-. OWIN bevat middlewareonderdelen voor verificatie, waaronder ondersteuning voor aanmeldingen met behulp van externe id-providers (zoals Microsoft-accounts, Facebook, Google, Twitter) en aanmeldingen met behulp van organisatieaccounts van on-premises Active Directory of Azure Active Directory. OWIN bevat ook ondersteuning voor OAuth 2.0, JWT en CORS.
ASP.NET eenvoudig lidmaatschap
ASP.NET Simple Membership is ontwikkeld als lidmaatschapssysteem voor ASP.NET Webpagina's. Het werd uitgebracht met WebMatrix en Visual Studio 2010 SP1. Het doel van Simple Membership was om eenvoudig lidmaatschapsfunctionaliteit toe te voegen aan een webpaginatoepassing.
Eenvoudig lidmaatschap maakte het gemakkelijker om gebruikersprofielgegevens aan te passen, maar deelt nog steeds de andere problemen met ASP.NET Lidmaatschap en heeft enkele beperkingen:
- Het was moeilijk om systeemgegevens van lidmaatschap vast te houden in een niet-relationele opslag.
- U kunt het niet gebruiken met OWIN.
- Het werkt niet goed met bestaande ASP.NET Lidmaatschapsproviders en is niet uitbreidbaar.
ASP.NET Universal Providers
ASP.NET Universal Providers zijn ontwikkeld om lidmaatschapsgegevens in Microsoft Azure SQL Database te behouden en ze werken ook met SQL Server Compact. De universele providers zijn gebouwd op Entity Framework Code First, wat betekent dat de universele providers kunnen worden gebruikt om gegevens in elke opslag te bewaren die wordt ondersteund door EF. Met de Universal Providers is het databaseschema ook vrij veel opgeschoond.
De universele providers zijn gebaseerd op de ASP.NET lidmaatschapsinfrastructuur, zodat ze nog steeds dezelfde beperkingen hebben als de SqlMembership-provider. Dat wil gezegd, ze zijn ontworpen voor relationele databases en het is moeilijk om profiel- en gebruikersgegevens aan te passen. Deze providers gebruiken ook nog steeds Forms Authentication voor de functionaliteit voor aanmelden en afmelden.
ASP.NET identiteit
Naarmate het lidmaatschapsverhaal in ASP.NET zich in de loop van de jaren heeft ontwikkeld, heeft het ASP.NET team veel geleerd van feedback van klanten.
De veronderstelling dat gebruikers zich aanmelden door een gebruikersnaam en wachtwoord in te voeren die ze hebben geregistreerd in uw eigen toepassing, zijn niet meer geldig. Het web is socialer geworden. Gebruikers communiceren in realtime met elkaar via sociale kanalen, zoals Facebook, Twitter en andere sociale websites. Ontwikkelaars willen dat gebruikers zich kunnen aanmelden met hun sociale identiteiten, zodat ze een rijke ervaring op hun websites kunnen hebben. Een modern lidmaatschapssysteem moet omleidingsgebaseerde aanmeldingen inschakelen voor verificatieproviders zoals Facebook, Twitter en anderen.
Naarmate de ontwikkeling van het web zich verder ontwikkelt, zijn de patronen van webontwikkeling ook veranderd. Eenheidstests van toepassingscode werden een kernprobleem voor toepassingsontwikkelaars. In 2008 ASP.NET een nieuw framework toegevoegd op basis van het MVC-patroon (Model-View-Controller), deels om ontwikkelaars te helpen bij het bouwen van moduletestbare ASP.NET toepassingen. Ontwikkelaars die hun toepassingslogica willen testen, wilden dat ook met het lidmaatschapssysteem.
Gezien deze wijzigingen in de ontwikkeling van webtoepassingen is ASP.NET Identity ontwikkeld met de volgende doelstellingen:
Eén ASP.NET-identiteitssysteem
- ASP.NET Identity kan worden gebruikt met alle ASP.NET frameworks, zoals ASP.NET MVC, Web Forms, Webpagina's, Web-API en SignalR.
- ASP.NET Identiteit kan worden gebruikt wanneer u web-, telefoon-, winkel- of hybride toepassingen bouwt.
Gemak van het invoeren van profielgegevens over de gebruiker
- U hebt controle over het schema van gebruikers- en profielgegevens. U kunt het systeem bijvoorbeeld eenvoudig inschakelen om geboortedatums op te slaan die door gebruikers zijn ingevoerd wanneer ze een account registreren in uw toepassing.
persistentiebeheer
- Standaard worden in het ASP.NET Identiteitssysteem alle gebruikersgegevens in een database opgeslagen. ASP.NET Identity maakt gebruik van Entity Framework Code First om al het persistentiemechanisme ervan te implementeren.
- Aangezien u het databaseschema bepaalt, zijn algemene taken zoals het wijzigen van tabelnamen of het wijzigen van het gegevenstype van primaire sleutels eenvoudig te doen.
- Het is eenvoudig om verschillende opslagmechanismen, zoals SharePoint, Azure Storage Table Service, NoSQL-databases, enzovoort, aan te sluiten zonder
System.NotImplementedExceptions
uitzonderingen te hoeven genereren.
testbaarheid van eenheden
- ASP.NET Identity maakt de webtoepassing testbaarer. U kunt eenheidstests schrijven voor de onderdelen van uw toepassing die gebruikmaken van ASP.NET Identity.
Rolprovider
- Er is een rolprovider waarmee u de toegang tot onderdelen van uw toepassing per rol kunt beperken. U kunt eenvoudig rollen maken, zoals 'Beheerder' en gebruikers toevoegen aan rollen.
claims-gebaseerd
- ASP.NET Identity ondersteunt verificatie op basis van claims, waarbij de identiteit van de gebruiker wordt weergegeven als een set claims. Met claims kunnen ontwikkelaars veel expressiefer zijn bij het beschrijven van de identiteit van een gebruiker dan rollen zijn toegestaan. Hoewel het rollidmaatschap slechts een booleaanse waarde (lid of niet-lid) is, kan een claim uitgebreide informatie bevatten over de identiteit en het lidmaatschap van de gebruiker.
sociale aanmeldingsproviders
- U kunt eenvoudig sociale aanmeldingen zoals Microsoft-account, Facebook, Twitter, Google en anderen toevoegen aan uw toepassing en de gebruikersspecifieke gegevens opslaan in uw toepassing.
OWIN-integratie
- ASP.NET verificatie is nu gebaseerd op OWIN-middleware die kan worden gebruikt op elke OWIN-host. ASP.NET Identity heeft geen afhankelijkheid van System.Web. Het is een volledig compatibel OWIN-framework en kan worden gebruikt in elke gehoste OWIN-toepassing.
- ASP.NET Identity maakt gebruik van OWIN-verificatie voor het aanmelden/afmelden van gebruikers op de website. Dit betekent dat in plaats van FormsAuthentication te gebruiken om de cookie te genereren, de toepassing OWIN CookieAuthentication gebruikt om dat te doen.
NuGet-pakket
- ASP.NET Identity wordt opnieuw gedistribueerd als een NuGet-pakket dat is geïnstalleerd in de ASP.NET MVC-, Web Forms- en Web-API-sjablonen die worden geleverd met Visual Studio 2017. U kunt dit NuGet-pakket downloaden vanuit de NuGet-galerie.
- Het vrijgeven van ASP.NET Identity als een NuGet-pakket maakt het voor het ASP.NET team eenvoudiger om nieuwe functies en oplossingen voor fouten te herhalen en deze op een flexibele manier aan ontwikkelaars te leveren.
Aan de slag met ASP.NET-identiteit
ASP.NET Identity wordt gebruikt in de Visual Studio 2017-projectsjablonen voor ASP.NET MVC, Web Forms, Web API en SPA. In dit scenario laten we zien hoe de projectsjablonen ASP.NET Identity gebruiken om functionaliteit toe te voegen voor het registreren, aanmelden en afmelden van een gebruiker.
ASP.NET Identiteit wordt geïmplementeerd met behulp van de volgende procedure. Het doel van dit artikel is om u een algemeen overzicht te geven van ASP.NET Identiteit; u kunt deze stap voor stap volgen of gewoon de details lezen. Zie de sectie Volgende stappen aan het einde van dit artikel voor gedetailleerde instructies over het maken van apps met ASP.NET Identity, waaronder het gebruik van de nieuwe API om gebruikers, rollen en profielgegevens toe te voegen.
Maak een ASP.NET MVC-toepassing met afzonderlijke accounts. U kunt ASP.NET Identiteit gebruiken in ASP.NET MVC, Web Forms, Web API, SignalR, enzovoort. In dit artikel beginnen we met een ASP.NET MVC-toepassing.
Het gemaakte project bevat de volgende drie pakketten voor ASP.NET Identity.
Microsoft.AspNet.Identity.EntityFramework
Dit pakket heeft de Entity Framework-implementatie van ASP.NET Identity die de ASP.NET Identiteitsgegevens en het schema naar SQL Server persistent maakt.Microsoft.AspNet.Identity.Core
Dit pakket bevat de kerninterfaces voor ASP.NET Identity. Dit pakket kan worden gebruikt om een implementatie te schrijven voor ASP.NET Identiteit die gericht is op verschillende persistentiearchieven, zoals Azure Table Storage, NoSQL-databases, enzovoort.Microsoft.AspNet.Identity.OWIN
Dit pakket bevat functionaliteit die wordt gebruikt om OWIN-verificatie aan te sluiten met ASP.NET Identiteit in ASP.NET toepassingen. Dit wordt gebruikt wanneer u aanmeldingsfunctionaliteit toevoegt aan uw toepassing en inbelt bij OWIN Cookie Authentication middleware om een cookie te genereren.
Een gebruiker maken.
Start de toepassing en klik vervolgens op de koppeling Registreren om een gebruiker te maken. In de volgende afbeelding ziet u de pagina Registreren waarmee de gebruikersnaam en het wachtwoord worden verzameld.Wanneer de gebruiker de knop Registreren selecteert, maakt de
Register
actie van de accountcontroller de gebruiker door de ASP.NET Identity-API aan te roepen, zoals hieronder is gemarkeerd:[HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public async Task<ActionResult> Register(RegisterViewModel model) { if (ModelState.IsValid) { var user = new ApplicationUser() { UserName = model.UserName }; var result = await UserManager.CreateAsync(user, model.Password); if (result.Succeeded) { await SignInAsync(user, isPersistent: false); return RedirectToAction("Index", "Home"); } else { AddErrors(result); } } // If we got this far, something failed, redisplay form return View(model); }
Aanmelden.
Als de gebruiker succesvol is aangemaakt, wordt zij aangemeld met de methodeSignInAsync
.[HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public async Task<ActionResult> Register(RegisterViewModel model) { if (ModelState.IsValid) { var user = new ApplicationUser { UserName = model.Email, Email = model.Email }; var result = await UserManager.CreateAsync(user, model.Password); if (result.Succeeded) { await SignInManager.SignInAsync(user, isPersistent:false, rememberBrowser:false); // For more information on how to enable account confirmation and password reset please visit https://go.microsoft.com/fwlink/?LinkID=320771 // Send an email with this link // string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id); // var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme); // await UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>"); return RedirectToAction("Index", "Home"); } AddErrors(result); } // If we got this far, something failed, redisplay form return View(model); }
Met de methode
SignInManager.SignInAsync
wordt een ClaimsIdentity-gegenereerd. Aangezien ASP.NET Identiteits- en OWIN-cookieverificatie op claims gebaseerd systeem zijn, vereist het framework dat de app een ClaimsIdentity voor de gebruiker genereert. ClaimsIdentity bevat informatie over alle claims voor de gebruiker, zoals de rollen waartoe de gebruiker behoort.Afmelden.
Selecteer de Afmelden koppeling om de actie LogOff aan te roepen in de accountcontroller.// POST: /Account/LogOff [HttpPost] [ValidateAntiForgeryToken] public ActionResult LogOff() { AuthenticationManager.SignOut(); return RedirectToAction("Index", "Home"); }
De gemarkeerde code hierboven toont de methode OWIN
AuthenticationManager.SignOut
. Dit is vergelijkbaar met de methode FormsAuthentication.SignOut die wordt gebruikt door de module FormsAuthentication in Web Forms.
Onderdelen van ASP.NET Identiteit
In het onderstaande diagram ziet u de onderdelen van het ASP.NET Identity-systeem (selecteer deze of in het diagram om het te vergroten). De pakketten in het groen vormen het ASP.NET Identity-systeem. Alle andere pakketten zijn afhankelijkheden die nodig zijn voor het gebruik van het ASP.NET Identity-systeem in ASP.NET toepassingen.
Hier volgt een korte beschrijving van de NuGet-pakketten die niet eerder zijn vermeld:
-
Microsoft.Owin.Security.Cookies
Middleware waarmee een toepassing authenticatie op basis van cookies kan gebruiken, vergelijkbaar met de ASP.NET Formulierverificatie. -
EntityFramework
Entity Framework is de aanbevolen technologie voor gegevenstoegang van Microsoft voor relationele databases.
Migreren van lidmaatschap naar ASP.NET identiteit
We hopen binnenkort richtlijnen te bieden voor het migreren van uw bestaande apps die gebruikmaken van ASP.NET Lidmaatschap of Eenvoudig lidmaatschap naar het nieuwe ASP.NET Identity-systeem.
Volgende stappen
-
Een ASP.NET MVC 5-app maken met Facebook- en Google OAuth2- en OpenID-aanmeldings-
In de zelfstudie wordt de ASP.NET Identity-API gebruikt om profielgegevens toe te voegen aan de gebruikersdatabase en hoe u zich verifieert met Google en Facebook. -
Een ASP.NET MVC-app maken met verificatie en SQL DB en implementeren in Azure App Service
Deze zelfstudie laat zien hoe u de Identiteits-API gebruikt om gebruikers en rollen toe te voegen. - https://github.com/rustd/AspnetIdentitySample
Voorbeeldtoepassing die laat zien hoe u basisrollen en gebruikersondersteuning toevoegt en hoe u rollen en gebruikersbeheer kunt uitvoeren.