Delen via


Scaffold Identity in ASP.NET Core-projecten

Door Rick Anderson

Blazor Identity steiger

ASP.NET Core-scaffolding Identity voegt ASP.NET Core Identity toe aan Blazor Web Apps en Blazor Server apps. Nadat de scaffolder de IdentityRazor onderdelen aan de app heeft toegevoegd, kunt u de onderdelen aanpassen aan de vereisten van uw app.

Hoewel de scaffolder de benodigde C#-code genereert om Identity in de app te scaffolden, moet u de database van het project bijwerken met een Entity Framework (EF) Core-databasemigratie om het proces te voltooien. In dit artikel worden de stappen uitgelegd die nodig zijn voor het migreren van een database.

Controleer de wijzigingen na het uitvoeren van de Identity scaffolder. We raden u aan GitHub of een ander broncodebeheersysteem te gebruiken waarin bestandswijzigingen worden weergegeven met een functie voor het terugdraaien van wijzigingen.

Services zijn vereist wanneer u tweeledige verificatie (2FA) gebruikt, accountbevestiging en wachtwoordherstel en andere beveiligingsfuncties met Identity. Services of service-stubs worden niet gegenereerd bij het maken van een scaffold.Identity Services om deze functies in te schakelen, moeten handmatig worden toegevoegd.

Razor Pagina's en MVC-scaffolding Identity

ASP.NET Core biedt ASP.NET Core Identity als een Razor klassenbibliotheek (RCL). Toepassingen die Identity inbegrepen hebben kunnen de scaffolder toepassen om selectief de broncode toe te voegen die in de Identity RCL is opgenomen. Mogelijk wilt u broncode genereren, zodat u de code kunt wijzigen en het gedrag kunt wijzigen. U kunt bijvoorbeeld de scaffolder instrueren om de code te genereren die in de registratie wordt gebruikt. Aangepaste Identity code overschrijft de standaard implementatie die wordt geleverd door de Identity RCL. Zie de sectie Volledige Identity ui-bron maken om volledige controle over de gebruikersinterface te krijgen en niet de standaard-RCL te gebruiken.

Toepassingen die geen verificatie bevatten, kunnen de scaffolder toepassen om het RCL-pakket Identity toe te voegen. U hebt de mogelijkheid om de gegenereerde Identity code te selecteren.

Hoewel de scaffolder de meeste benodigde code genereert, moet u uw project bijwerken om het proces te voltooien. In dit document worden de stappen uitgelegd die nodig zijn voor het voltooien van een update van de Identity scaffolding.

We raden u aan een versiebeheersysteem te gebruiken dat bestandsverschillen laat zien en waarmee u wijzigingen ongedaan kunt maken. Controleer de wijzigingen na het uitvoeren van de Identity scaffolder.

Services zijn vereist bij gebruik van Two Factor Authentication, accountbevestiging en wachtwoordherstel en andere beveiligingsfuncties met Identity. Services of service-stubs worden niet gegenereerd bij het maken van een scaffold.Identity Services om deze functies in te schakelen, moeten handmatig worden toegevoegd. Zie Bijvoorbeeld e-mailbevestiging vereisen.

Apps die zijn gemaakt met afzonderlijke accounts, mogen doorgaans geen nieuwe gegevenscontext maken.

Scaffold Identity naar een Blazor project

Deze sectie is van toepassing op Blazor Web Apps en Blazor Server apps.

Voer de Identity scaffolder uit:

  • Klik in Solution Explorer met de rechtermuisknop op het project >Add>New Scaffolded Item.
  • In het linkerdeelvenster van het dialoogvenster Nieuw uitgebreid item toevoegen, selecteer Identity. Selecteer Blazor Identity in het middelste deelvenster. Selecteer de knop Toevoegen.
  • In het dialoogvenster Toevoegen BlazorIdentity :
    • Selecteer of voeg toe met de plusknop (+) de DbContext class (databasecontextklasse).
    • Selecteer de databaseprovider (databaseprovider), die standaard sql Server is.
    • Selecteer de gebruikersklasse (+) of voeg deze toe met de plusknop ().
    • Selecteer de knop Toevoegen.

Voor de gegenereerde Identity databasecode zijn migraties vereistEF Core. In de volgende stappen wordt uitgelegd hoe u een migratie maakt en toepast op de database.

Visual Studio Connected Services worden gebruikt om een EF Core migratie toe te voegen en de database bij te werken.

Dubbelklik in Solution Explorerop Connected Services. Selecteer in het SQL Server Express LocalDB-gedeelte van de Serviceafhankelijkhedenhet beletselteken (...), gevolgd door Migratie toevoegen.

Geef de migratie een migratienaam, zoals CreateIdentitySchema, een naam die de migratie beschrijft. Wacht tot de databasecontext is geladen, in het DbContext-klassenaamveld, wat enkele seconden kan duren. Selecteer voltooien om de migratie te maken.

Selecteer de knop Sluiten nadat de bewerking is voltooid.

Selecteer het beletselteken (...) opnieuw gevolgd door de opdracht Database bijwerken.

Het dialoogvenster Database bijwerken met de meest recente migratie wordt geopend. Wacht tot de DbContext-klassenamen veld zijn bijgewerkt en voordat eerdere migraties zijn geladen. Dit kan enkele seconden duren. Selecteer de knop voltooien.

Selecteer de knop Sluiten nadat de bewerking is voltooid.

Met de opdracht database bijwerken worden de Up methodemigraties uitgevoerd die niet zijn toegepast in een migratiecodebestand dat door de scaffolder is gemaakt. In dit geval voert de opdracht de Up methode uit in het Migrations/{TIME STAMP}_{MIGRATION NAME}.cs bestand, waarmee de Identity tabellen, beperkingen en indexen worden gemaakt. De {TIME STAMP} placeholder is een tijdstempel en de {MIGRATION NAME} placeholder is de naam van de migratie.

Apps aan de clientzijde Blazor (zelfstandig Blazor WebAssembly)

Apps aan de clientzijde Blazor (zelfstandig Blazor WebAssembly) gebruiken hun eigen Identity UI-benaderingen en kunnen geen ASP.NET Core-scaffolding Identity gebruiken.

Zie de Blazor beveiligings- en Identity artikelen voor meer informatie.

Scaffold Identity in een Razor project zonder bestaande autorisatie

Installeer het Microsoft.VisualStudio.Web.CodeGeneration.Design NuGet-pakket.

Opmerking

Zie voor richtlijnen over het toevoegen van pakketten aan .NET-apps de artikelen onder Pakketten installeren en beheren in de Package consumption workflow (NuGet-documentatie). Bevestig de juiste pakketversies op NuGet.org.


Voer de Identity scaffolder uit:

  • Klik in Solution Explorer met de rechtermuisknop op het project >Add>New Scaffolded Item.
  • In het linkerdeelvenster van het dialoogvenster Nieuw uitgebreid item toevoegen, selecteer Identity. Selecteer Identity in het middelste deelvenster. Selecteer de knop Toevoegen.
  • Selecteer in het dialoogvenster Toevoegen Identity de gewenste opties.
    • Als u een bestaande, aangepaste indelingspagina voor Identity (_Layout.cshtml) hebt, selecteert u de bestaande indelingspagina om te voorkomen dat uw indeling wordt overschreven met onjuiste opmaak door de scaffolder. Selecteer bijvoorbeeld:
      • Pages/Shared/_Layout.cshtml voor Razor pagina's of Blazor Server projecten met bestaande Razor pagina-infrastructuur.
      • Views/Shared/_Layout.cshtml voor MVC-projecten of Blazor Server projecten met bestaande MVC-infrastructuur.
    • Voor de gegevenscontext (DbContext-klasse):
      • Selecteer uw gegevenscontextklasse. U moet ten minste één bestand selecteren om uw gegevenscontext toe te voegen.
      • Als u een gegevenscontext wilt maken en eventueel een nieuwe gebruikersklasse wilt maken, Identityselecteert u de + knop. Accepteer de standaardwaarde of geef een klasse op (bijvoorbeeld Contoso.Data.ApplicationDbContext voor een bedrijf met de naam Contoso). Als u een nieuwe gebruikersklasse wilt maken, selecteert u de knop voor + en geeft u de klasse op (bijvoorbeeld voor een bedrijf met de ContosoUser naam Contoso).
    • Selecteer de knop Toevoegen om de scaffolder uit te voeren.

Migraties, UseAuthentication en indeling

Voor de gegenereerde Identity databasecode zijn EF-kernmigraties (Entity Framework) vereist. Als er geen migratie voor het genereren van het Identity schema is gemaakt en toegepast op de database, maakt u een migratie en werkt u de database bij.

Visual Studio Connected Services worden gebruikt om een EF Core migratie toe te voegen en de database bij te werken.

Dubbelklik in Solution Explorerop Connected Services. Selecteer in het SQL Server Express LocalDB-gedeelte van de Serviceafhankelijkhedenhet beletselteken (...), gevolgd door Migratie toevoegen.

Geef de migratie een migratienaam, zoals CreateIdentitySchema, een naam die de migratie beschrijft. Wacht tot de databasecontext is geladen, in het DbContext-klassenaamveld, wat enkele seconden kan duren. Selecteer voltooien om de migratie te maken.

Selecteer de knop Sluiten nadat de bewerking is voltooid.

Selecteer het beletselteken (...) opnieuw gevolgd door de opdracht Database bijwerken.

Het dialoogvenster Database bijwerken met de meest recente migratie wordt geopend. Wacht tot de DbContext-klassenamen veld zijn bijgewerkt en voordat eerdere migraties zijn geladen. Dit kan enkele seconden duren. Selecteer de knop voltooien.

Selecteer de knop Sluiten nadat de bewerking is voltooid.

Met de opdracht database bijwerken worden de Up methodemigraties uitgevoerd die niet zijn toegepast in een migratiecodebestand dat door de scaffolder is gemaakt. In dit geval voert de opdracht de Up methode uit in het Migrations/{TIME STAMP}_{MIGRATION NAME}.cs bestand, waarmee de Identity tabellen, beperkingen en indexen worden gemaakt. De {TIME STAMP} placeholder is een tijdstempel en de {MIGRATION NAME} placeholder is de naam van de migratie.

Als het Identity schema al is gemaakt maar niet is toegepast op de database, moet alleen de opdracht voor het bijwerken van de database worden uitgevoerd:

Dubbelklik in Solution Explorerop Connected Services. Selecteer in het gebied SQL Server Express LocalDB van serviceafhankelijkheden het beletselteken (...) gevolgd door de opdracht Database bijwerken .

Het dialoogvenster Database bijwerken met de meest recente migratie wordt geopend. Wacht tot de DbContext-klassenamen veld zijn bijgewerkt en voordat eerdere migraties zijn geladen. Dit kan enkele seconden duren. Selecteer de knop voltooien.

Selecteer de knop Sluiten nadat de bewerking is voltooid.

U kunt de toepassing van een Identity schema bevestigen met de volgende opdracht. De uitvoer van de opdracht bevat een kolom 'applied' om weer te geven welke migraties op de database worden toegepast.

Voer in de Visual Studio Package Manager-console het volgende uit Get-Migration:

Get-Migration

Als er meer dan één databasecontext bestaat, geeft u de context op met de -Context parameter.

Layoutwijzigingen

Optioneel: Voeg het login-gedeelte (_LoginPartial) toe aan het layoutbestand.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>@ViewData["Title"] - WebRPnoAuth2Auth</title>
    <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
    <link rel="stylesheet" href="~/css/site.css" asp-append-version="true" />
    <link rel="stylesheet" href="~/WebRPnoAuth2Auth.styles.css" asp-append-version="true" />
</head>
<body>
    <header>
        <nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
            <div class="container">
                <a class="navbar-brand" asp-area="" asp-page="/Index">WebRPnoAuth2Auth</a>
                <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target=".navbar-collapse" aria-controls="navbarSupportedContent"
                        aria-expanded="false" aria-label="Toggle navigation">
                    <span class="navbar-toggler-icon"></span>
                </button>
                <div class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
                    <ul class="navbar-nav flex-grow-1">
                        <li class="nav-item">
                            <a class="nav-link text-dark" asp-area="" asp-page="/Index">Home</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link text-dark" asp-area="" asp-page="/Privacy">Privacy</a>
                        </li>
                    </ul>
                    <partial name="_LoginPartial" />
                </div>
            </div>
        </nav>
    </header>
    <div class="container">
        <main role="main" class="pb-3">
            @RenderBody()
        </main>
    </div>

    <footer class="border-top footer text-muted">
        <div class="container">
            &copy; 2021 - WebRPnoAuth2Auth - <a asp-area="" asp-page="/Privacy">Privacy</a>
        </div>
    </footer>

    <script src="~/lib/jquery/dist/jquery.js"></script>
    <script src="~/lib/bootstrap/dist/js/bootstrap.bundle.js"></script>
    <script src="~/js/site.js" asp-append-version="true"></script>

    @await RenderSectionAsync("Scripts", required: false)
</body>
</html>

Configureer Identity in een Razor project met toestemming

Installeer het Microsoft.VisualStudio.Web.CodeGeneration.Design NuGet-pakket.

Opmerking

Zie voor richtlijnen over het toevoegen van pakketten aan .NET-apps de artikelen onder Pakketten installeren en beheren in de Package consumption workflow (NuGet-documentatie). Bevestig de juiste pakketversies op NuGet.org.


Voer de Identity scaffolder uit:

  • Klik in Solution Explorer met de rechtermuisknop op het project >Add>New Scaffolded Item.
  • In het linkerdeelvenster van het dialoogvenster Nieuw uitgebreid item toevoegen, selecteer Identity. Selecteer Identity in het middelste deelvenster. Selecteer de knop Toevoegen.
  • Selecteer in het dialoogvenster Toevoegen Identity de gewenste opties.
    • Als u een bestaande, aangepaste indelingspagina voor Identity (_Layout.cshtml) hebt, selecteert u de bestaande indelingspagina om te voorkomen dat uw indeling wordt overschreven met onjuiste opmaak door de scaffolder. Selecteer bijvoorbeeld:
      • Pages/Shared/_Layout.cshtml voor Razor pagina's of Blazor Server projecten met bestaande Razor pagina-infrastructuur.
      • Views/Shared/_Layout.cshtml voor MVC-projecten of Blazor Server projecten met bestaande MVC-infrastructuur.
    • Voor de gegevenscontext (DbContext-klasse):
      • Selecteer uw gegevenscontextklasse. U moet ten minste één bestand selecteren om uw gegevenscontext toe te voegen.
      • Als u een gegevenscontext wilt maken en eventueel een nieuwe gebruikersklasse wilt maken, Identityselecteert u de + knop. Accepteer de standaardwaarde of geef een klasse op (bijvoorbeeld Contoso.Data.ApplicationDbContext voor een bedrijf met de naam Contoso). Als u een nieuwe gebruikersklasse wilt maken, selecteert u de knop voor + en geeft u de klasse op (bijvoorbeeld voor een bedrijf met de ContosoUser naam Contoso).
    • Selecteer de knop Toevoegen om de scaffolder uit te voeren.

Scaffold Identity in een MVC-project zonder bestaande autorisatie

Installeer het Microsoft.VisualStudio.Web.CodeGeneration.Design NuGet-pakket.

Opmerking

Zie voor richtlijnen over het toevoegen van pakketten aan .NET-apps de artikelen onder Pakketten installeren en beheren in de Package consumption workflow (NuGet-documentatie). Bevestig de juiste pakketversies op NuGet.org.


Voer de Identity scaffolder uit:

  • Klik in Solution Explorer met de rechtermuisknop op het project >Add>New Scaffolded Item.
  • In het linkerdeelvenster van het dialoogvenster Nieuw uitgebreid item toevoegen, selecteer Identity. Selecteer Identity in het middelste deelvenster. Selecteer de knop Toevoegen.
  • Selecteer in het dialoogvenster Toevoegen Identity de gewenste opties.
    • Als u een bestaande, aangepaste indelingspagina voor Identity (_Layout.cshtml) hebt, selecteert u de bestaande indelingspagina om te voorkomen dat uw indeling wordt overschreven met onjuiste opmaak door de scaffolder. Selecteer bijvoorbeeld:
      • Pages/Shared/_Layout.cshtml voor Razor pagina's of Blazor Server projecten met bestaande Razor pagina-infrastructuur.
      • Views/Shared/_Layout.cshtml voor MVC-projecten of Blazor Server projecten met bestaande MVC-infrastructuur.
    • Voor de gegevenscontext (DbContext-klasse):
      • Selecteer uw gegevenscontextklasse. U moet ten minste één bestand selecteren om uw gegevenscontext toe te voegen.
      • Als u een gegevenscontext wilt maken en eventueel een nieuwe gebruikersklasse wilt maken, Identityselecteert u de + knop. Accepteer de standaardwaarde of geef een klasse op (bijvoorbeeld Contoso.Data.ApplicationDbContext voor een bedrijf met de naam Contoso). Als u een nieuwe gebruikersklasse wilt maken, selecteert u de knop voor + en geeft u de klasse op (bijvoorbeeld voor een bedrijf met de ContosoUser naam Contoso).
    • Selecteer de knop Toevoegen om de scaffolder uit te voeren.

Optioneel: Voeg de aanmelding gedeeltelijk (_LoginPartial) toe aan het Views/Shared/_Layout.cshtml bestand:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>@ViewData["Title"] - WebRPnoAuth2Auth</title>
    <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
    <link rel="stylesheet" href="~/css/site.css" asp-append-version="true" />
    <link rel="stylesheet" href="~/WebRPnoAuth2Auth.styles.css" asp-append-version="true" />
</head>
<body>
    <header>
        <nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
            <div class="container">
                <a class="navbar-brand" asp-area="" asp-page="/Index">WebRPnoAuth2Auth</a>
                <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target=".navbar-collapse" aria-controls="navbarSupportedContent"
                        aria-expanded="false" aria-label="Toggle navigation">
                    <span class="navbar-toggler-icon"></span>
                </button>
                <div class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
                    <ul class="navbar-nav flex-grow-1">
                        <li class="nav-item">
                            <a class="nav-link text-dark" asp-area="" asp-page="/Index">Home</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link text-dark" asp-area="" asp-page="/Privacy">Privacy</a>
                        </li>
                    </ul>
                    <partial name="_LoginPartial" />
                </div>
            </div>
        </nav>
    </header>
    <div class="container">
        <main role="main" class="pb-3">
            @RenderBody()
        </main>
    </div>

    <footer class="border-top footer text-muted">
        <div class="container">
            &copy; 2021 - WebRPnoAuth2Auth - <a asp-area="" asp-page="/Privacy">Privacy</a>
        </div>
    </footer>

    <script src="~/lib/jquery/dist/jquery.js"></script>
    <script src="~/lib/bootstrap/dist/js/bootstrap.bundle.js"></script>
    <script src="~/js/site.js" asp-append-version="true"></script>

    @await RenderSectionAsync("Scripts", required: false)
</body>
</html>

Voor de gegenereerde Identity databasecode zijn EF-kernmigraties (Entity Framework) vereist. Als er geen migratie voor het genereren van het Identity schema is gemaakt en toegepast op de database, maakt u een migratie en werkt u de database bij.

Visual Studio Connected Services worden gebruikt om een EF Core migratie toe te voegen en de database bij te werken.

Dubbelklik in Solution Explorerop Connected Services. Selecteer in het SQL Server Express LocalDB-gedeelte van de Serviceafhankelijkhedenhet beletselteken (...), gevolgd door Migratie toevoegen.

Geef de migratie een migratienaam, zoals CreateIdentitySchema, een naam die de migratie beschrijft. Wacht tot de databasecontext is geladen, in het DbContext-klassenaamveld, wat enkele seconden kan duren. Selecteer voltooien om de migratie te maken.

Selecteer de knop Sluiten nadat de bewerking is voltooid.

Selecteer het beletselteken (...) opnieuw gevolgd door de opdracht Database bijwerken.

Het dialoogvenster Database bijwerken met de meest recente migratie wordt geopend. Wacht tot de DbContext-klassenamen veld zijn bijgewerkt en voordat eerdere migraties zijn geladen. Dit kan enkele seconden duren. Selecteer de knop voltooien.

Selecteer de knop Sluiten nadat de bewerking is voltooid.

Met de opdracht database bijwerken worden de Up methodemigraties uitgevoerd die niet zijn toegepast in een migratiecodebestand dat door de scaffolder is gemaakt. In dit geval voert de opdracht de Up methode uit in het Migrations/{TIME STAMP}_{MIGRATION NAME}.cs bestand, waarmee de Identity tabellen, beperkingen en indexen worden gemaakt. De {TIME STAMP} placeholder is een tijdstempel en de {MIGRATION NAME} placeholder is de naam van de migratie.

Als het Identity schema al is gemaakt maar niet is toegepast op de database, moet alleen de opdracht voor het bijwerken van de database worden uitgevoerd:

Dubbelklik in Solution Explorerop Connected Services. Selecteer in het gebied SQL Server Express LocalDB van serviceafhankelijkheden het beletselteken (...) gevolgd door de opdracht Database bijwerken .

Het dialoogvenster Database bijwerken met de meest recente migratie wordt geopend. Wacht tot de DbContext-klassenamen veld zijn bijgewerkt en voordat eerdere migraties zijn geladen. Dit kan enkele seconden duren. Selecteer de knop voltooien.

Selecteer de knop Sluiten nadat de bewerking is voltooid.

U kunt de toepassing van een Identity schema bevestigen met de volgende opdracht. De uitvoer van de opdracht bevat een kolom 'applied' om weer te geven welke migraties op de database worden toegepast.

Voer in de Visual Studio Package Manager-console het volgende uit Get-Migration:

Get-Migration

Als er meer dan één databasecontext bestaat, geeft u de context op met de -Context parameter.

Toevoegen MapRazorPages aan Program.cs zoals wordt weergegeven in de volgende gemarkeerde code:

using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using WebMVCauth.Data;

var builder = WebApplication.CreateBuilder(args);

var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
builder.Services.AddDbContext<ApplicationDbContext>(options =>
    options.UseSqlServer(connectionString));
builder.Services.AddDatabaseDeveloperPageExceptionFilter();

builder.Services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
    .AddEntityFrameworkStores<ApplicationDbContext>();
builder.Services.AddControllersWithViews();

var app = builder.Build();

if (app.Environment.IsDevelopment())
{
    app.UseMigrationsEndPoint();
}
else
{
    app.UseExceptionHandler("/Home/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthentication();
app.UseAuthorization();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");
app.MapRazorPages();

app.Run();

Scaffold Identity in een MVC-project met autorisatie

Installeer het Microsoft.VisualStudio.Web.CodeGeneration.Design NuGet-pakket.

Opmerking

Zie voor richtlijnen over het toevoegen van pakketten aan .NET-apps de artikelen onder Pakketten installeren en beheren in de Package consumption workflow (NuGet-documentatie). Bevestig de juiste pakketversies op NuGet.org.


Voer de Identity scaffolder uit:

  • Klik in Solution Explorer met de rechtermuisknop op het project >Add>New Scaffolded Item.
  • In het linkerdeelvenster van het dialoogvenster Nieuw uitgebreid item toevoegen, selecteer Identity. Selecteer Identity in het middelste deelvenster. Selecteer de knop Toevoegen.
  • Selecteer in het dialoogvenster Toevoegen Identity de gewenste opties.
    • Als u een bestaande, aangepaste indelingspagina voor Identity (_Layout.cshtml) hebt, selecteert u de bestaande indelingspagina om te voorkomen dat uw indeling wordt overschreven met onjuiste opmaak door de scaffolder. Selecteer bijvoorbeeld:
      • Pages/Shared/_Layout.cshtml voor Razor pagina's of Blazor Server projecten met bestaande Razor pagina-infrastructuur.
      • Views/Shared/_Layout.cshtml voor MVC-projecten of Blazor Server projecten met bestaande MVC-infrastructuur.
    • Voor de gegevenscontext (DbContext-klasse):
      • Selecteer uw gegevenscontextklasse. U moet ten minste één bestand selecteren om uw gegevenscontext toe te voegen.
      • Als u een gegevenscontext wilt maken en eventueel een nieuwe gebruikersklasse wilt maken, Identityselecteert u de + knop. Accepteer de standaardwaarde of geef een klasse op (bijvoorbeeld Contoso.Data.ApplicationDbContext voor een bedrijf met de naam Contoso). Als u een nieuwe gebruikersklasse wilt maken, selecteert u de knop voor + en geeft u de klasse op (bijvoorbeeld voor een bedrijf met de ContosoUser naam Contoso).
    • Selecteer de knop Toevoegen om de scaffolder uit te voeren.

Volledige UI-bron Identity maken

Als u de volledige controle over de Identity gebruikersinterface wilt behouden, voert u de Identity scaffolder uit en selecteert u Alle bestanden overschrijven.

Wachtwoordconfiguratie

Als PasswordOptions zijn geconfigureerd in Startup.ConfigureServices, is mogelijk de configuratie van de [StringLength]-eigenschap vereist voor de -eigenschap in gegenereerde Password-pagina's. InputModel Password de eigenschappen zijn te vinden in de volgende bestanden:

  • Areas/Identity/Pages/Account/Register.cshtml.cs
  • Areas/Identity/Pages/Account/ResetPassword.cshtml.cs

Een pagina uitschakelen

In deze sectie ziet u hoe u de registratiepagina uitschakelt, maar de methode kan worden gebruikt om een pagina uit te schakelen.

Gebruikersregistratie uitschakelen:

  • Steiger Identity. Neem Account.Register, Account.Login en Account.RegisterConfirmation op. Voorbeeld:

    dotnet aspnet-codegenerator identity -dc RPauth.Data.ApplicationDbContext --files "Account.Register;Account.Login;Account.RegisterConfirmation"
    
  • Werk Areas/Identity/Pages/Account/Register.cshtml.cs bij zodat gebruikers zich niet kunnen registreren vanaf dit eindpunt:

    public class RegisterModel : PageModel
    {
        public IActionResult OnGet()
        {
            return RedirectToPage("Login");
        }
    
        public IActionResult OnPost()
        {
            return RedirectToPage("Login");
        }
    }
    
  • Update Areas/Identity/Pages/Account/Register.cshtml om consistent te zijn met de voorgaande wijzigingen:

    @page
    @model RegisterModel
    @{
        ViewData["Title"] = "Go to Login";
    }
    
    <h1>@ViewData["Title"]</h1>
    
    <li class="nav-item">
        <a class="nav-link text-dark" asp-area="Identity" asp-page="/Account/Login">Login</a>
    </li>
    
  • Commentaar toevoegen aan of verwijderen van de registratiekoppeling Areas/Identity/Pages/Account/Login.cshtml

    @*
    <p>
        <a asp-page="./Register" asp-route-returnUrl="@Model.ReturnUrl">Register as a new user</a>
    </p>
    *@
    
  • Werk de Areas/Identity/Pages/Account/RegisterConfirmation pagina bij.

    • Verwijder de code en koppelingen uit het cshtml-bestand.
    • Verwijder de bevestigingscode uit de PageModel.
    [AllowAnonymous]
      public class RegisterConfirmationModel : PageModel
      {
          public IActionResult OnGet()
          {  
              return Page();
          }
      }
    

Een andere app gebruiken om gebruikers toe te voegen

Geef een mechanisme op om gebruikers buiten de web-app toe te voegen. Opties voor het toevoegen van gebruikers zijn:

  • Een toegewezen beheerweb-app.
  • Een console-app.

In de volgende code wordt één benadering beschreven voor het toevoegen van gebruikers:

  • Een lijst met gebruikers wordt in het geheugen gelezen.
  • Voor elke gebruiker wordt een sterk uniek wachtwoord gegenereerd.
  • De gebruiker wordt toegevoegd aan de Identity database.
  • De gebruiker krijgt een melding en wordt verteld het wachtwoord te wijzigen.
public class Program
{
    public static void Main(string[] args)
    {
        var host = CreateHostBuilder(args).Build();

        using (var scope = host.Services.CreateScope())
        {
            var services = scope.ServiceProvider;

            try
            {
                var context = services.GetRequiredService<AppDbCntx>();
                context.Database.Migrate();

                var config = host.Services.GetRequiredService<IConfiguration>();
                var userList = config.GetSection("userList").Get<List<string>>();

                SeedData.Initialize(services, userList).Wait();
            }
            catch (Exception ex)
            {
                var logger = services.GetRequiredService<ILogger<Program>>();
                logger.LogError(ex, "An error occurred adding users.");
            }
        }

        host.Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}

De volgende code geeft een overzicht van het toevoegen van een gebruiker:


public static async Task Initialize(IServiceProvider serviceProvider,
                                    List<string> userList)
{
    var userManager = serviceProvider.GetService<UserManager<IdentityUser>>();

    foreach (var userName in userList)
    {
        var userPassword = GenerateSecurePassword();
        var userId = await EnsureUser(userManager, userName, userPassword);

        NotifyUser(userName, userPassword);
    }
}

private static async Task<string> EnsureUser(UserManager<IdentityUser> userManager,
                                             string userName, string userPassword)
{
    var user = await userManager.FindByNameAsync(userName);

    if (user == null)
    {
        user = new IdentityUser(userName)
        {
            EmailConfirmed = true
        };
        await userManager.CreateAsync(user, userPassword);
    }

    return user.Id;
}

Een vergelijkbare benadering kan worden gevolgd voor productiescenario's.

Publicatie van statische Identity assets voorkomen

Raadpleeg Identity om te leren hoe u kunt voorkomen dat statische Identity assets worden gepubliceerd in de hoofdmap van het web.

ASP.NET Core biedt ASP.NET Core Identity als een Razor klassenbibliotheek (RCL). Toepassingen die Identity inbegrepen hebben kunnen de scaffolder toepassen om selectief de broncode toe te voegen die in de Identity RCL is opgenomen. Mogelijk wilt u broncode genereren, zodat u de code kunt wijzigen en het gedrag kunt wijzigen. U kunt bijvoorbeeld de scaffolder instrueren om de code te genereren die in de registratie wordt gebruikt. Gegenereerde code heeft voorrang op dezelfde code in de Identity RCL. Zie de sectie Volledige Identity ui-bron maken om volledige controle over de gebruikersinterface te krijgen en niet de standaard-RCL te gebruiken.

Toepassingen die geen verificatie bevatten, kunnen de scaffolder toepassen om het RCL-pakket Identity toe te voegen. U hebt de mogelijkheid om de gegenereerde Identity code te selecteren.

Hoewel de scaffolder de meeste benodigde code genereert, moet u uw project bijwerken om het proces te voltooien. In dit document worden de stappen uitgelegd die nodig zijn voor het voltooien van een update van de Identity scaffolding.

We raden u aan een versiebeheersysteem te gebruiken dat bestandsverschillen laat zien en waarmee u wijzigingen ongedaan kunt maken. Controleer de wijzigingen na het uitvoeren van de Identity scaffolder.

Services zijn vereist bij gebruik van Two Factor Authentication, accountbevestiging en wachtwoordherstel en andere beveiligingsfuncties met Identity. Services of service-stubs worden niet gegenereerd bij het maken van een scaffold.Identity Services om deze functies in te schakelen, moeten handmatig worden toegevoegd. Zie Bijvoorbeeld e-mailbevestiging vereisen.

Apps die zijn gemaakt met afzonderlijke accounts, mogen doorgaans geen nieuwe gegevenscontext maken.

Scaffold Identity in een Razor project zonder bestaande autorisatie

Installeer het Microsoft.VisualStudio.Web.CodeGeneration.Design NuGet-pakket.

Opmerking

Zie voor richtlijnen over het toevoegen van pakketten aan .NET-apps de artikelen onder Pakketten installeren en beheren in de Package consumption workflow (NuGet-documentatie). Bevestig de juiste pakketversies op NuGet.org.


Voer de Identity scaffolder uit:

  • Klik in Solution Explorer met de rechtermuisknop op het project >Add>New Scaffolded Item.
  • In het linkerdeelvenster van het dialoogvenster Nieuw uitgebreid item toevoegen, selecteer Identity. Selecteer Identity in het middelste deelvenster. Selecteer de knop Toevoegen.
  • Selecteer in het dialoogvenster Toevoegen Identity de gewenste opties.
    • Als u een bestaande, aangepaste indelingspagina voor Identity (_Layout.cshtml) hebt, selecteert u de bestaande indelingspagina om te voorkomen dat uw indeling wordt overschreven met onjuiste opmaak door de scaffolder. Selecteer bijvoorbeeld:
      • Pages/Shared/_Layout.cshtml voor Razor pagina's of Blazor Server projecten met bestaande Razor pagina-infrastructuur.
      • Views/Shared/_Layout.cshtml voor MVC-projecten of Blazor Server projecten met bestaande MVC-infrastructuur.
    • Voor de gegevenscontext (DbContext-klasse):
      • Selecteer uw gegevenscontextklasse. U moet ten minste één bestand selecteren om uw gegevenscontext toe te voegen.
      • Als u een gegevenscontext wilt maken en eventueel een nieuwe gebruikersklasse wilt maken, Identityselecteert u de + knop. Accepteer de standaardwaarde of geef een klasse op (bijvoorbeeld Contoso.Data.ApplicationDbContext voor een bedrijf met de naam Contoso). Als u een nieuwe gebruikersklasse wilt maken, selecteert u de knop voor + en geeft u de klasse op (bijvoorbeeld voor een bedrijf met de ContosoUser naam Contoso).
    • Selecteer de knop Toevoegen om de scaffolder uit te voeren.

Migraties, UseAuthentication en indeling

Voor de gegenereerde Identity databasecode zijn EF-kernmigraties (Entity Framework) vereist. Als er geen migratie voor het genereren van het Identity schema is gemaakt en toegepast op de database, maakt u een migratie en werkt u de database bij.

Visual Studio Connected Services worden gebruikt om een EF Core migratie toe te voegen en de database bij te werken.

Dubbelklik in Solution Explorerop Connected Services. Selecteer in het SQL Server Express LocalDB-gedeelte van de Serviceafhankelijkhedenhet beletselteken (...), gevolgd door Migratie toevoegen.

Geef de migratie een migratienaam, zoals CreateIdentitySchema, een naam die de migratie beschrijft. Wacht tot de databasecontext is geladen, in het DbContext-klassenaamveld, wat enkele seconden kan duren. Selecteer voltooien om de migratie te maken.

Selecteer de knop Sluiten nadat de bewerking is voltooid.

Selecteer het beletselteken (...) opnieuw gevolgd door de opdracht Database bijwerken.

Het dialoogvenster Database bijwerken met de meest recente migratie wordt geopend. Wacht tot de DbContext-klassenamen veld zijn bijgewerkt en voordat eerdere migraties zijn geladen. Dit kan enkele seconden duren. Selecteer de knop voltooien.

Selecteer de knop Sluiten nadat de bewerking is voltooid.

Met de opdracht database bijwerken worden de Up methodemigraties uitgevoerd die niet zijn toegepast in een migratiecodebestand dat door de scaffolder is gemaakt. In dit geval voert de opdracht de Up methode uit in het Migrations/{TIME STAMP}_{MIGRATION NAME}.cs bestand, waarmee de Identity tabellen, beperkingen en indexen worden gemaakt. De {TIME STAMP} placeholder is een tijdstempel en de {MIGRATION NAME} placeholder is de naam van de migratie.

Als het Identity schema al is gemaakt maar niet is toegepast op de database, moet alleen de opdracht voor het bijwerken van de database worden uitgevoerd:

Dubbelklik in Solution Explorerop Connected Services. Selecteer in het gebied SQL Server Express LocalDB van serviceafhankelijkheden het beletselteken (...) gevolgd door de opdracht Database bijwerken .

Het dialoogvenster Database bijwerken met de meest recente migratie wordt geopend. Wacht tot de DbContext-klassenamen veld zijn bijgewerkt en voordat eerdere migraties zijn geladen. Dit kan enkele seconden duren. Selecteer de knop voltooien.

Selecteer de knop Sluiten nadat de bewerking is voltooid.

U kunt de toepassing van een Identity schema bevestigen met de volgende opdracht. De uitvoer van de opdracht bevat een kolom 'applied' om weer te geven welke migraties op de database worden toegepast.

Voer in de Visual Studio Package Manager-console het volgende uit Get-Migration:

Get-Migration

Als er meer dan één databasecontext bestaat, geeft u de context op met de -Context parameter.

Layoutwijzigingen

Optioneel: Voeg het login-gedeelte (_LoginPartial) toe aan het layoutbestand.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>@ViewData["Title"] - WebRPnoAuth2Auth</title>
    <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
    <link rel="stylesheet" href="~/css/site.css" asp-append-version="true" />
    <link rel="stylesheet" href="~/WebRPnoAuth2Auth.styles.css" asp-append-version="true" />
</head>
<body>
    <header>
        <nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
            <div class="container">
                <a class="navbar-brand" asp-area="" asp-page="/Index">WebRPnoAuth2Auth</a>
                <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target=".navbar-collapse" aria-controls="navbarSupportedContent"
                        aria-expanded="false" aria-label="Toggle navigation">
                    <span class="navbar-toggler-icon"></span>
                </button>
                <div class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
                    <ul class="navbar-nav flex-grow-1">
                        <li class="nav-item">
                            <a class="nav-link text-dark" asp-area="" asp-page="/Index">Home</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link text-dark" asp-area="" asp-page="/Privacy">Privacy</a>
                        </li>
                    </ul>
                    <partial name="_LoginPartial" />
                </div>
            </div>
        </nav>
    </header>
    <div class="container">
        <main role="main" class="pb-3">
            @RenderBody()
        </main>
    </div>

    <footer class="border-top footer text-muted">
        <div class="container">
            &copy; 2021 - WebRPnoAuth2Auth - <a asp-area="" asp-page="/Privacy">Privacy</a>
        </div>
    </footer>

    <script src="~/lib/jquery/dist/jquery.js"></script>
    <script src="~/lib/bootstrap/dist/js/bootstrap.bundle.js"></script>
    <script src="~/js/site.js" asp-append-version="true"></script>

    @await RenderSectionAsync("Scripts", required: false)
</body>
</html>

Configureer Identity in een Razor project met toestemming

Installeer het Microsoft.VisualStudio.Web.CodeGeneration.Design NuGet-pakket.

Opmerking

Zie voor richtlijnen over het toevoegen van pakketten aan .NET-apps de artikelen onder Pakketten installeren en beheren in de Package consumption workflow (NuGet-documentatie). Bevestig de juiste pakketversies op NuGet.org.


Voer de Identity scaffolder uit:

  • Klik in Solution Explorer met de rechtermuisknop op het project >Add>New Scaffolded Item.
  • In het linkerdeelvenster van het dialoogvenster Nieuw uitgebreid item toevoegen, selecteer Identity. Selecteer Identity in het middelste deelvenster. Selecteer de knop Toevoegen.
  • Selecteer in het dialoogvenster Toevoegen Identity de gewenste opties.
    • Als u een bestaande, aangepaste indelingspagina voor Identity (_Layout.cshtml) hebt, selecteert u de bestaande indelingspagina om te voorkomen dat uw indeling wordt overschreven met onjuiste opmaak door de scaffolder. Selecteer bijvoorbeeld:
      • Pages/Shared/_Layout.cshtml voor Razor pagina's of Blazor Server projecten met bestaande Razor pagina-infrastructuur.
      • Views/Shared/_Layout.cshtml voor MVC-projecten of Blazor Server projecten met bestaande MVC-infrastructuur.
    • Voor de gegevenscontext (DbContext-klasse):
      • Selecteer uw gegevenscontextklasse. U moet ten minste één bestand selecteren om uw gegevenscontext toe te voegen.
      • Als u een gegevenscontext wilt maken en eventueel een nieuwe gebruikersklasse wilt maken, Identityselecteert u de + knop. Accepteer de standaardwaarde of geef een klasse op (bijvoorbeeld Contoso.Data.ApplicationDbContext voor een bedrijf met de naam Contoso). Als u een nieuwe gebruikersklasse wilt maken, selecteert u de knop voor + en geeft u de klasse op (bijvoorbeeld voor een bedrijf met de ContosoUser naam Contoso).
    • Selecteer de knop Toevoegen om de scaffolder uit te voeren.

Scaffold Identity in een MVC-project zonder bestaande autorisatie

Installeer het Microsoft.VisualStudio.Web.CodeGeneration.Design NuGet-pakket.

Opmerking

Zie voor richtlijnen over het toevoegen van pakketten aan .NET-apps de artikelen onder Pakketten installeren en beheren in de Package consumption workflow (NuGet-documentatie). Bevestig de juiste pakketversies op NuGet.org.


Voer de Identity scaffolder uit:

  • Klik in Solution Explorer met de rechtermuisknop op het project >Add>New Scaffolded Item.
  • In het linkerdeelvenster van het dialoogvenster Nieuw uitgebreid item toevoegen, selecteer Identity. Selecteer Identity in het middelste deelvenster. Selecteer de knop Toevoegen.
  • Selecteer in het dialoogvenster Toevoegen Identity de gewenste opties.
    • Als u een bestaande, aangepaste indelingspagina voor Identity (_Layout.cshtml) hebt, selecteert u de bestaande indelingspagina om te voorkomen dat uw indeling wordt overschreven met onjuiste opmaak door de scaffolder. Selecteer bijvoorbeeld:
      • Pages/Shared/_Layout.cshtml voor Razor pagina's of Blazor Server projecten met bestaande Razor pagina-infrastructuur.
      • Views/Shared/_Layout.cshtml voor MVC-projecten of Blazor Server projecten met bestaande MVC-infrastructuur.
    • Voor de gegevenscontext (DbContext-klasse):
      • Selecteer uw gegevenscontextklasse. U moet ten minste één bestand selecteren om uw gegevenscontext toe te voegen.
      • Als u een gegevenscontext wilt maken en eventueel een nieuwe gebruikersklasse wilt maken, Identityselecteert u de + knop. Accepteer de standaardwaarde of geef een klasse op (bijvoorbeeld Contoso.Data.ApplicationDbContext voor een bedrijf met de naam Contoso). Als u een nieuwe gebruikersklasse wilt maken, selecteert u de knop voor + en geeft u de klasse op (bijvoorbeeld voor een bedrijf met de ContosoUser naam Contoso).
    • Selecteer de knop Toevoegen om de scaffolder uit te voeren.

Optioneel: Voeg de aanmelding gedeeltelijk (_LoginPartial) toe aan het Views/Shared/_Layout.cshtml bestand:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>@ViewData["Title"] - WebRPnoAuth2Auth</title>
    <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
    <link rel="stylesheet" href="~/css/site.css" asp-append-version="true" />
    <link rel="stylesheet" href="~/WebRPnoAuth2Auth.styles.css" asp-append-version="true" />
</head>
<body>
    <header>
        <nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
            <div class="container">
                <a class="navbar-brand" asp-area="" asp-page="/Index">WebRPnoAuth2Auth</a>
                <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target=".navbar-collapse" aria-controls="navbarSupportedContent"
                        aria-expanded="false" aria-label="Toggle navigation">
                    <span class="navbar-toggler-icon"></span>
                </button>
                <div class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
                    <ul class="navbar-nav flex-grow-1">
                        <li class="nav-item">
                            <a class="nav-link text-dark" asp-area="" asp-page="/Index">Home</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link text-dark" asp-area="" asp-page="/Privacy">Privacy</a>
                        </li>
                    </ul>
                    <partial name="_LoginPartial" />
                </div>
            </div>
        </nav>
    </header>
    <div class="container">
        <main role="main" class="pb-3">
            @RenderBody()
        </main>
    </div>

    <footer class="border-top footer text-muted">
        <div class="container">
            &copy; 2021 - WebRPnoAuth2Auth - <a asp-area="" asp-page="/Privacy">Privacy</a>
        </div>
    </footer>

    <script src="~/lib/jquery/dist/jquery.js"></script>
    <script src="~/lib/bootstrap/dist/js/bootstrap.bundle.js"></script>
    <script src="~/js/site.js" asp-append-version="true"></script>

    @await RenderSectionAsync("Scripts", required: false)
</body>
</html>

Voor de gegenereerde Identity databasecode zijn EF-kernmigraties (Entity Framework) vereist. Als er geen migratie voor het genereren van het Identity schema is gemaakt en toegepast op de database, maakt u een migratie en werkt u de database bij.

Visual Studio Connected Services worden gebruikt om een EF Core migratie toe te voegen en de database bij te werken.

Dubbelklik in Solution Explorerop Connected Services. Selecteer in het SQL Server Express LocalDB-gedeelte van de Serviceafhankelijkhedenhet beletselteken (...), gevolgd door Migratie toevoegen.

Geef de migratie een migratienaam, zoals CreateIdentitySchema, een naam die de migratie beschrijft. Wacht tot de databasecontext is geladen, in het DbContext-klassenaamveld, wat enkele seconden kan duren. Selecteer voltooien om de migratie te maken.

Selecteer de knop Sluiten nadat de bewerking is voltooid.

Selecteer het beletselteken (...) opnieuw gevolgd door de opdracht Database bijwerken.

Het dialoogvenster Database bijwerken met de meest recente migratie wordt geopend. Wacht tot de DbContext-klassenamen veld zijn bijgewerkt en voordat eerdere migraties zijn geladen. Dit kan enkele seconden duren. Selecteer de knop voltooien.

Selecteer de knop Sluiten nadat de bewerking is voltooid.

Met de opdracht database bijwerken worden de Up methodemigraties uitgevoerd die niet zijn toegepast in een migratiecodebestand dat door de scaffolder is gemaakt. In dit geval voert de opdracht de Up methode uit in het Migrations/{TIME STAMP}_{MIGRATION NAME}.cs bestand, waarmee de Identity tabellen, beperkingen en indexen worden gemaakt. De {TIME STAMP} placeholder is een tijdstempel en de {MIGRATION NAME} placeholder is de naam van de migratie.

Als het Identity schema al is gemaakt maar niet is toegepast op de database, moet alleen de opdracht voor het bijwerken van de database worden uitgevoerd:

Dubbelklik in Solution Explorerop Connected Services. Selecteer in het gebied SQL Server Express LocalDB van serviceafhankelijkheden het beletselteken (...) gevolgd door de opdracht Database bijwerken .

Het dialoogvenster Database bijwerken met de meest recente migratie wordt geopend. Wacht tot de DbContext-klassenamen veld zijn bijgewerkt en voordat eerdere migraties zijn geladen. Dit kan enkele seconden duren. Selecteer de knop voltooien.

Selecteer de knop Sluiten nadat de bewerking is voltooid.

U kunt de toepassing van een Identity schema bevestigen met de volgende opdracht. De uitvoer van de opdracht bevat een kolom 'applied' om weer te geven welke migraties op de database worden toegepast.

Voer in de Visual Studio Package Manager-console het volgende uit Get-Migration:

Get-Migration

Als er meer dan één databasecontext bestaat, geeft u de context op met de -Context parameter.

Toevoegen MapRazorPages aan Program.cs zoals wordt weergegeven in de volgende gemarkeerde code:

using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using WebMVCauth.Data;

var builder = WebApplication.CreateBuilder(args);

var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
builder.Services.AddDbContext<ApplicationDbContext>(options =>
    options.UseSqlServer(connectionString));
builder.Services.AddDatabaseDeveloperPageExceptionFilter();

builder.Services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
    .AddEntityFrameworkStores<ApplicationDbContext>();
builder.Services.AddControllersWithViews();

var app = builder.Build();

if (app.Environment.IsDevelopment())
{
    app.UseMigrationsEndPoint();
}
else
{
    app.UseExceptionHandler("/Home/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthentication();
app.UseAuthorization();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");
app.MapRazorPages();

app.Run();

Scaffold Identity in een MVC-project met autorisatie

Installeer het Microsoft.VisualStudio.Web.CodeGeneration.Design NuGet-pakket.

Opmerking

Zie voor richtlijnen over het toevoegen van pakketten aan .NET-apps de artikelen onder Pakketten installeren en beheren in de Package consumption workflow (NuGet-documentatie). Bevestig de juiste pakketversies op NuGet.org.


Voer de Identity scaffolder uit:

  • Klik in Solution Explorer met de rechtermuisknop op het project >Add>New Scaffolded Item.
  • In het linkerdeelvenster van het dialoogvenster Nieuw uitgebreid item toevoegen, selecteer Identity. Selecteer Identity in het middelste deelvenster. Selecteer de knop Toevoegen.
  • Selecteer in het dialoogvenster Toevoegen Identity de gewenste opties.
    • Als u een bestaande, aangepaste indelingspagina voor Identity (_Layout.cshtml) hebt, selecteert u de bestaande indelingspagina om te voorkomen dat uw indeling wordt overschreven met onjuiste opmaak door de scaffolder. Selecteer bijvoorbeeld:
      • Pages/Shared/_Layout.cshtml voor Razor pagina's of Blazor Server projecten met bestaande Razor pagina-infrastructuur.
      • Views/Shared/_Layout.cshtml voor MVC-projecten of Blazor Server projecten met bestaande MVC-infrastructuur.
    • Voor de gegevenscontext (DbContext-klasse):
      • Selecteer uw gegevenscontextklasse. U moet ten minste één bestand selecteren om uw gegevenscontext toe te voegen.
      • Als u een gegevenscontext wilt maken en eventueel een nieuwe gebruikersklasse wilt maken, Identityselecteert u de + knop. Accepteer de standaardwaarde of geef een klasse op (bijvoorbeeld Contoso.Data.ApplicationDbContext voor een bedrijf met de naam Contoso). Als u een nieuwe gebruikersklasse wilt maken, selecteert u de knop voor + en geeft u de klasse op (bijvoorbeeld voor een bedrijf met de ContosoUser naam Contoso).
    • Selecteer de knop Toevoegen om de scaffolder uit te voeren.

Scaffold Identity voor een server-side Blazor app met autorisatie

Installeer het Microsoft.VisualStudio.Web.CodeGeneration.Design NuGet-pakket.

Opmerking

Zie voor richtlijnen over het toevoegen van pakketten aan .NET-apps de artikelen onder Pakketten installeren en beheren in de Package consumption workflow (NuGet-documentatie). Bevestig de juiste pakketversies op NuGet.org.


Voer de Identity scaffolder uit:

  • Klik in Solution Explorer met de rechtermuisknop op het project >Add>New Scaffolded Item.
  • In het linkerdeelvenster van het dialoogvenster Nieuw uitgebreid item toevoegen, selecteer Identity. Selecteer Identity in het middelste deelvenster. Selecteer de knop Toevoegen.
  • Selecteer in het dialoogvenster Toevoegen Identity de gewenste opties.
    • Als u een bestaande, aangepaste indelingspagina voor Identity (_Layout.cshtml) hebt, selecteert u de bestaande indelingspagina om te voorkomen dat uw indeling wordt overschreven met onjuiste opmaak door de scaffolder. Selecteer bijvoorbeeld:
      • Pages/Shared/_Layout.cshtml voor Razor pagina's of Blazor Server projecten met bestaande Razor pagina-infrastructuur.
      • Views/Shared/_Layout.cshtml voor MVC-projecten of Blazor Server projecten met bestaande MVC-infrastructuur.
    • Voor de gegevenscontext (DbContext-klasse):
      • Selecteer uw gegevenscontextklasse. U moet ten minste één bestand selecteren om uw gegevenscontext toe te voegen.
      • Als u een gegevenscontext wilt maken en eventueel een nieuwe gebruikersklasse wilt maken, Identityselecteert u de + knop. Accepteer de standaardwaarde of geef een klasse op (bijvoorbeeld Contoso.Data.ApplicationDbContext voor een bedrijf met de naam Contoso). Als u een nieuwe gebruikersklasse wilt maken, selecteert u de knop voor + en geeft u de klasse op (bijvoorbeeld voor een bedrijf met de ContosoUser naam Contoso).
    • Selecteer de knop Toevoegen om de scaffolder uit te voeren.

Migraties

Voor de gegenereerde Identity databasecode zijn EF-kernmigraties (Entity Framework) vereist. Als er geen migratie voor het genereren van het Identity schema is gemaakt en toegepast op de database, maakt u een migratie en werkt u de database bij.

Visual Studio Connected Services worden gebruikt om een EF Core migratie toe te voegen en de database bij te werken.

Dubbelklik in Solution Explorerop Connected Services. Selecteer in het SQL Server Express LocalDB-gedeelte van de Serviceafhankelijkhedenhet beletselteken (...), gevolgd door Migratie toevoegen.

Geef de migratie een migratienaam, zoals CreateIdentitySchema, een naam die de migratie beschrijft. Wacht tot de databasecontext is geladen, in het DbContext-klassenaamveld, wat enkele seconden kan duren. Selecteer voltooien om de migratie te maken.

Selecteer de knop Sluiten nadat de bewerking is voltooid.

Selecteer het beletselteken (...) opnieuw gevolgd door de opdracht Database bijwerken.

Het dialoogvenster Database bijwerken met de meest recente migratie wordt geopend. Wacht tot de DbContext-klassenamen veld zijn bijgewerkt en voordat eerdere migraties zijn geladen. Dit kan enkele seconden duren. Selecteer de knop voltooien.

Selecteer de knop Sluiten nadat de bewerking is voltooid.

Met de opdracht database bijwerken worden de Up methodemigraties uitgevoerd die niet zijn toegepast in een migratiecodebestand dat door de scaffolder is gemaakt. In dit geval voert de opdracht de Up methode uit in het Migrations/{TIME STAMP}_{MIGRATION NAME}.cs bestand, waarmee de Identity tabellen, beperkingen en indexen worden gemaakt. De {TIME STAMP} placeholder is een tijdstempel en de {MIGRATION NAME} placeholder is de naam van de migratie.

Als het Identity schema al is gemaakt maar niet is toegepast op de database, moet alleen de opdracht voor het bijwerken van de database worden uitgevoerd:

Dubbelklik in Solution Explorerop Connected Services. Selecteer in het gebied SQL Server Express LocalDB van serviceafhankelijkheden het beletselteken (...) gevolgd door de opdracht Database bijwerken .

Het dialoogvenster Database bijwerken met de meest recente migratie wordt geopend. Wacht tot de DbContext-klassenamen veld zijn bijgewerkt en voordat eerdere migraties zijn geladen. Dit kan enkele seconden duren. Selecteer de knop voltooien.

Selecteer de knop Sluiten nadat de bewerking is voltooid.

U kunt de toepassing van een Identity schema bevestigen met de volgende opdracht. De uitvoer van de opdracht bevat een kolom 'applied' om weer te geven welke migraties op de database worden toegepast.

Voer in de Visual Studio Package Manager-console het volgende uit Get-Migration:

Get-Migration

Als er meer dan één databasecontext bestaat, geeft u de context op met de -Context parameter.

Verificatie-API-eindpunten voor style

Omdat apps aan de serverzijde Blazor gebruikmaken van Razor Pages Identity pagina's, verandert de stijl van de gebruikersinterface wanneer een bezoeker tussen Identity pagina's en onderdelen navigeert. U hebt twee opties om de inconsistente stijlen aan te pakken:

Aangepaste Identity onderdelen

ASP.NET Core Identity is ontworpen om te werken in de context van HTTP-aanvraag- en antwoordcommunicatie. Dit is niet het primaire communicatiemodel van de client-server in Blazor apps. ASP.NET Core-apps die gebruikmaken van ASP.NET Core Identity voor gebruikersbeheer, moeten Razor Pagina's gebruiken in plaats van Razor onderdelen voor Identity-gerelateerde gebruikersinterface, zoals gebruikersregistratie, aanmelding, afmelding en andere taken voor gebruikersbeheer.

Omdat SignInManager<TUser> en UserManager<TUser> niet worden ondersteund in Razor componenten, raden we aan om een web-API te gebruiken om Identity acties vanuit Razor componenten te beheren via een server-side Identity-enabled ASP.NET Core-app. Zie Blazorvoor hulp bij het maken van web-API's voor Blazor apps.

Een manier om Razor-onderdelen te gebruiken voor Identity in plaats van Razor-pagina's is door je eigen aangepaste IdentityRazor-onderdelen te ontwikkelen, maar Microsoft raadt deze benadering niet aan en ondersteunt deze niet. Bekijk de volgende discussies voor aanvullende context. In de volgende discussies worden codevoorbeelden in opmerkingen en codevoorbeelden die kruislings zijn gekoppeld in niet-Microsoft GitHub-opslagplaatsen niet door Microsoft ondersteund, maar kunnen mogelijk nuttig zijn voor sommige ontwikkelaars.

Voor aanvullende hulp bij het bouwen van aangepaste IdentityRazor onderdelen of het zoeken naar onderdelen van Razor derden raden we de volgende bronnen aan:

Een aangepaste indeling gebruiken met Blazor app-stijlen

De Identity pagina-indeling en -stijlen kunnen worden aangepast om pagina's te produceren die gebruikmaken van stijlen die vergelijkbaar zijn met het standaardthema Blazor . Deze benadering wordt niet gedekt door de documentatie.

Blazor-apps aan de clientzijde

Apps aan de clientzijde Blazor gebruiken hun eigen Identity UI-benaderingen en kunnen geen ASP.NET Core-scaffolding Identity gebruiken. Server-side ASP.NET Core-apps van gehoste Blazor oplossingen kunnen de Pages/MVC-richtlijnen in dit artikel volgen en zijn geconfigureerd net als elk ander type ASP.NET Core-app die Razor ondersteunt.

Het Blazor framework bevat Razor geen onderdeelversies van Identity UI-pagina's. Identity UI-onderdelen Razor kunnen aangepast worden gebouwd of verkregen uit niet-ondersteunde bronnen van derden.

Zie de Blazor beveiligings- en Identity artikelen voor meer informatie.

Volledige UI-bron Identity maken

Als u de volledige controle over de Identity gebruikersinterface wilt behouden, voert u de Identity scaffolder uit en selecteert u Alle bestanden overschrijven.

Wachtwoordconfiguratie

Als PasswordOptions zijn geconfigureerd in Startup.ConfigureServices, is mogelijk de configuratie van de [StringLength]-eigenschap vereist voor de -eigenschap in gegenereerde Password-pagina's. InputModel Password de eigenschappen zijn te vinden in de volgende bestanden:

  • Areas/Identity/Pages/Account/Register.cshtml.cs
  • Areas/Identity/Pages/Account/ResetPassword.cshtml.cs

Een pagina uitschakelen

In deze sectie ziet u hoe u de registratiepagina uitschakelt, maar de methode kan worden gebruikt om een pagina uit te schakelen.

Gebruikersregistratie uitschakelen:

  • Steiger Identity. Neem Account.Register, Account.Login en Account.RegisterConfirmation op. Voorbeeld:

    dotnet aspnet-codegenerator identity -dc RPauth.Data.ApplicationDbContext --files "Account.Register;Account.Login;Account.RegisterConfirmation"
    
  • Werk Areas/Identity/Pages/Account/Register.cshtml.cs bij zodat gebruikers zich niet kunnen registreren vanaf dit eindpunt:

    public class RegisterModel : PageModel
    {
        public IActionResult OnGet()
        {
            return RedirectToPage("Login");
        }
    
        public IActionResult OnPost()
        {
            return RedirectToPage("Login");
        }
    }
    
  • Update Areas/Identity/Pages/Account/Register.cshtml om consistent te zijn met de voorgaande wijzigingen:

    @page
    @model RegisterModel
    @{
        ViewData["Title"] = "Go to Login";
    }
    
    <h1>@ViewData["Title"]</h1>
    
    <li class="nav-item">
        <a class="nav-link text-dark" asp-area="Identity" asp-page="/Account/Login">Login</a>
    </li>
    
  • Commentaar toevoegen aan of verwijderen van de registratiekoppeling Areas/Identity/Pages/Account/Login.cshtml

    @*
    <p>
        <a asp-page="./Register" asp-route-returnUrl="@Model.ReturnUrl">Register as a new user</a>
    </p>
    *@
    
  • Werk de Areas/Identity/Pages/Account/RegisterConfirmation pagina bij.

    • Verwijder de code en koppelingen uit het cshtml-bestand.
    • Verwijder de bevestigingscode uit de PageModel.
    [AllowAnonymous]
      public class RegisterConfirmationModel : PageModel
      {
          public IActionResult OnGet()
          {  
              return Page();
          }
      }
    

Een andere app gebruiken om gebruikers toe te voegen

Geef een mechanisme op om gebruikers buiten de web-app toe te voegen. Opties voor het toevoegen van gebruikers zijn:

  • Een toegewezen beheerweb-app.
  • Een console-app.

In de volgende code wordt één benadering beschreven voor het toevoegen van gebruikers:

  • Een lijst met gebruikers wordt in het geheugen gelezen.
  • Voor elke gebruiker wordt een sterk uniek wachtwoord gegenereerd.
  • De gebruiker wordt toegevoegd aan de Identity database.
  • De gebruiker krijgt een melding en wordt verteld het wachtwoord te wijzigen.
public class Program
{
    public static void Main(string[] args)
    {
        var host = CreateHostBuilder(args).Build();

        using (var scope = host.Services.CreateScope())
        {
            var services = scope.ServiceProvider;

            try
            {
                var context = services.GetRequiredService<AppDbCntx>();
                context.Database.Migrate();

                var config = host.Services.GetRequiredService<IConfiguration>();
                var userList = config.GetSection("userList").Get<List<string>>();

                SeedData.Initialize(services, userList).Wait();
            }
            catch (Exception ex)
            {
                var logger = services.GetRequiredService<ILogger<Program>>();
                logger.LogError(ex, "An error occurred adding users.");
            }
        }

        host.Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}

De volgende code geeft een overzicht van het toevoegen van een gebruiker:


public static async Task Initialize(IServiceProvider serviceProvider,
                                    List<string> userList)
{
    var userManager = serviceProvider.GetService<UserManager<IdentityUser>>();

    foreach (var userName in userList)
    {
        var userPassword = GenerateSecurePassword();
        var userId = await EnsureUser(userManager, userName, userPassword);

        NotifyUser(userName, userPassword);
    }
}

private static async Task<string> EnsureUser(UserManager<IdentityUser> userManager,
                                             string userName, string userPassword)
{
    var user = await userManager.FindByNameAsync(userName);

    if (user == null)
    {
        user = new IdentityUser(userName)
        {
            EmailConfirmed = true
        };
        await userManager.CreateAsync(user, userPassword);
    }

    return user.Id;
}

Een vergelijkbare benadering kan worden gevolgd voor productiescenario's.

Publicatie van statische Identity assets voorkomen

Raadpleeg Identity om te leren hoe u kunt voorkomen dat statische Identity assets worden gepubliceerd in de hoofdmap van het web.

ASP.NET Core biedt ASP.NET Core Identity als een Razor klassenbibliotheek (RCL). Toepassingen die Identity inbegrepen hebben kunnen de scaffolder toepassen om selectief de broncode toe te voegen die in de Identity RCL is opgenomen. Mogelijk wilt u broncode genereren, zodat u de code kunt wijzigen en het gedrag kunt wijzigen. U kunt bijvoorbeeld de scaffolder instrueren om de code te genereren die in de registratie wordt gebruikt. Gegenereerde code heeft voorrang op dezelfde code in de Identity RCL. Zie de sectie Volledige Identity ui-bron maken om volledige controle over de gebruikersinterface te krijgen en niet de standaard-RCL te gebruiken.

Toepassingen die geen verificatie bevatten, kunnen de scaffolder toepassen om het RCL-pakket Identity toe te voegen. U hebt de mogelijkheid om de gegenereerde Identity code te selecteren.

Hoewel de scaffolder de meeste benodigde code genereert, moet u uw project bijwerken om het proces te voltooien. In dit document worden de stappen uitgelegd die nodig zijn voor het voltooien van een update van de Identity scaffolding.

We raden u aan een versiebeheersysteem te gebruiken dat bestandsverschillen laat zien en waarmee u wijzigingen ongedaan kunt maken. Controleer de wijzigingen na het uitvoeren van de Identity scaffolder.

Services zijn vereist bij gebruik van Two Factor Authentication, accountbevestiging en wachtwoordherstel en andere beveiligingsfuncties met Identity. Services of service-stubs worden niet gegenereerd bij het maken van een scaffold.Identity Services om deze functies in te schakelen, moeten handmatig worden toegevoegd. Zie Bijvoorbeeld e-mailbevestiging vereisen.

Wanneer u een nieuwe gegevenscontext voor Identity in een project met bestaande accounts plaatst, opent u Startup.ConfigureServices en verwijdert u de aanroepen naar:

  • AddDbContext
  • AddDefaultIdentity

In de volgende code worden bijvoorbeeld AddDbContext en AddDefaultIdentity uitgeschakeld.

public void ConfigureServices(IServiceCollection services)
{
    //services.AddDbContext<ApplicationDbContext>(options =>
    //    options.UseSqlServer(
    //        Configuration.GetConnectionString("DefaultConnection")));
    //services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
    //    .AddEntityFrameworkStores<ApplicationDbContext>();
    services.AddControllersWithViews();
    services.AddRazorPages();
}

In de voorgaande code wordt de code aangegeven die wordt gedupliceerd in Areas/Identity/IdentityHostingStartup.cs

Apps die zijn gemaakt met afzonderlijke accounts, mogen doorgaans geen nieuwe gegevenscontext maken.

Scaffold Identity in een leeg project

Voer de Identity scaffolder uit:

  • Klik in Solution Explorer met de rechtermuisknop op het project >Add>New Scaffolded Item.
  • In het linkerdeelvenster van het dialoogvenster Nieuw uitgebreid item toevoegen, selecteer Identity. Selecteer Identity in het middelste deelvenster. Selecteer de knop Toevoegen.
  • Selecteer in het dialoogvenster Toevoegen Identity de gewenste opties.
    • Als u een bestaande, aangepaste indelingspagina voor Identity (_Layout.cshtml) hebt, selecteert u de bestaande indelingspagina om te voorkomen dat uw indeling wordt overschreven met onjuiste opmaak door de scaffolder. Selecteer bijvoorbeeld:
      • Pages/Shared/_Layout.cshtml voor Razor pagina's of Blazor Server projecten met bestaande Razor pagina-infrastructuur.
      • Views/Shared/_Layout.cshtml voor MVC-projecten of Blazor Server projecten met bestaande MVC-infrastructuur.
    • Voor de gegevenscontext (DbContext-klasse):
      • Selecteer uw gegevenscontextklasse. U moet ten minste één bestand selecteren om uw gegevenscontext toe te voegen.
      • Als u een gegevenscontext wilt maken en eventueel een nieuwe gebruikersklasse wilt maken, Identityselecteert u de + knop. Accepteer de standaardwaarde of geef een klasse op (bijvoorbeeld Contoso.Data.ApplicationDbContext voor een bedrijf met de naam Contoso). Als u een nieuwe gebruikersklasse wilt maken, selecteert u de knop voor + en geeft u de klasse op (bijvoorbeeld voor een bedrijf met de ContosoUser naam Contoso).
    • Selecteer de knop Toevoegen om de scaffolder uit te voeren.

Werk de Startup klasse bij met code die vergelijkbaar is met de volgende:

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllersWithViews();
        services.AddRazorPages();
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
            app.UseDatabaseErrorPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
            app.UseHsts();
        }
        app.UseHttpsRedirection();
        app.UseStaticFiles();

        app.UseRouting();

        app.UseAuthentication();
        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller=Home}/{action=Index}/{id?}");
            endpoints.MapRazorPages();
        });
    }
}

UseHsts wordt aanbevolen, maar niet vereist. Zie HTTP Strict Transport Security Protocol voor meer informatie.

Voor de gegenereerde Identity databasecode zijn EF-kernmigraties (Entity Framework) vereist. Als er geen migratie voor het genereren van het Identity schema is gemaakt en toegepast op de database, maakt u een migratie en werkt u de database bij.

Visual Studio Connected Services worden gebruikt om een EF Core migratie toe te voegen en de database bij te werken.

Dubbelklik in Solution Explorerop Connected Services. Selecteer in het SQL Server Express LocalDB-gedeelte van de Serviceafhankelijkhedenhet beletselteken (...), gevolgd door Migratie toevoegen.

Geef de migratie een migratienaam, zoals CreateIdentitySchema, een naam die de migratie beschrijft. Wacht tot de databasecontext is geladen, in het DbContext-klassenaamveld, wat enkele seconden kan duren. Selecteer voltooien om de migratie te maken.

Selecteer de knop Sluiten nadat de bewerking is voltooid.

Selecteer het beletselteken (...) opnieuw gevolgd door de opdracht Database bijwerken.

Het dialoogvenster Database bijwerken met de meest recente migratie wordt geopend. Wacht tot de DbContext-klassenamen veld zijn bijgewerkt en voordat eerdere migraties zijn geladen. Dit kan enkele seconden duren. Selecteer de knop voltooien.

Selecteer de knop Sluiten nadat de bewerking is voltooid.

Met de opdracht database bijwerken worden de Up methodemigraties uitgevoerd die niet zijn toegepast in een migratiecodebestand dat door de scaffolder is gemaakt. In dit geval voert de opdracht de Up methode uit in het Migrations/{TIME STAMP}_{MIGRATION NAME}.cs bestand, waarmee de Identity tabellen, beperkingen en indexen worden gemaakt. De {TIME STAMP} placeholder is een tijdstempel en de {MIGRATION NAME} placeholder is de naam van de migratie.

Als het Identity schema al is gemaakt maar niet is toegepast op de database, moet alleen de opdracht voor het bijwerken van de database worden uitgevoerd:

Dubbelklik in Solution Explorerop Connected Services. Selecteer in het gebied SQL Server Express LocalDB van serviceafhankelijkheden het beletselteken (...) gevolgd door de opdracht Database bijwerken .

Het dialoogvenster Database bijwerken met de meest recente migratie wordt geopend. Wacht tot de DbContext-klassenamen veld zijn bijgewerkt en voordat eerdere migraties zijn geladen. Dit kan enkele seconden duren. Selecteer de knop voltooien.

Selecteer de knop Sluiten nadat de bewerking is voltooid.

U kunt de toepassing van een Identity schema bevestigen met de volgende opdracht. De uitvoer van de opdracht bevat een kolom 'applied' om weer te geven welke migraties op de database worden toegepast.

Voer in de Visual Studio Package Manager-console het volgende uit Get-Migration:

Get-Migration

Als er meer dan één databasecontext bestaat, geeft u de context op met de -Context parameter.

Scaffold Identity in een Razor project zonder bestaande autorisatie

Voer de Identity scaffolder uit:

  • Klik in Solution Explorer met de rechtermuisknop op het project >Add>New Scaffolded Item.
  • In het linkerdeelvenster van het dialoogvenster Nieuw uitgebreid item toevoegen, selecteer Identity. Selecteer Identity in het middelste deelvenster. Selecteer de knop Toevoegen.
  • Selecteer in het dialoogvenster Toevoegen Identity de gewenste opties.
    • Als u een bestaande, aangepaste indelingspagina voor Identity (_Layout.cshtml) hebt, selecteert u de bestaande indelingspagina om te voorkomen dat uw indeling wordt overschreven met onjuiste opmaak door de scaffolder. Selecteer bijvoorbeeld:
      • Pages/Shared/_Layout.cshtml voor Razor pagina's of Blazor Server projecten met bestaande Razor pagina-infrastructuur.
      • Views/Shared/_Layout.cshtml voor MVC-projecten of Blazor Server projecten met bestaande MVC-infrastructuur.
    • Voor de gegevenscontext (DbContext-klasse):
      • Selecteer uw gegevenscontextklasse. U moet ten minste één bestand selecteren om uw gegevenscontext toe te voegen.
      • Als u een gegevenscontext wilt maken en eventueel een nieuwe gebruikersklasse wilt maken, Identityselecteert u de + knop. Accepteer de standaardwaarde of geef een klasse op (bijvoorbeeld Contoso.Data.ApplicationDbContext voor een bedrijf met de naam Contoso). Als u een nieuwe gebruikersklasse wilt maken, selecteert u de knop voor + en geeft u de klasse op (bijvoorbeeld voor een bedrijf met de ContosoUser naam Contoso).
    • Selecteer de knop Toevoegen om de scaffolder uit te voeren.

Identity is geconfigureerd in Areas/Identity/IdentityHostingStartup.cs. Zie IHostingStartup voor meer informatie.

Migraties, UseAuthentication en indeling

Voor de gegenereerde Identity databasecode zijn EF-kernmigraties (Entity Framework) vereist. Als er geen migratie voor het genereren van het Identity schema is gemaakt en toegepast op de database, maakt u een migratie en werkt u de database bij.

Visual Studio Connected Services worden gebruikt om een EF Core migratie toe te voegen en de database bij te werken.

Dubbelklik in Solution Explorerop Connected Services. Selecteer in het SQL Server Express LocalDB-gedeelte van de Serviceafhankelijkhedenhet beletselteken (...), gevolgd door Migratie toevoegen.

Geef de migratie een migratienaam, zoals CreateIdentitySchema, een naam die de migratie beschrijft. Wacht tot de databasecontext is geladen, in het DbContext-klassenaamveld, wat enkele seconden kan duren. Selecteer voltooien om de migratie te maken.

Selecteer de knop Sluiten nadat de bewerking is voltooid.

Selecteer het beletselteken (...) opnieuw gevolgd door de opdracht Database bijwerken.

Het dialoogvenster Database bijwerken met de meest recente migratie wordt geopend. Wacht tot de DbContext-klassenamen veld zijn bijgewerkt en voordat eerdere migraties zijn geladen. Dit kan enkele seconden duren. Selecteer de knop voltooien.

Selecteer de knop Sluiten nadat de bewerking is voltooid.

Met de opdracht database bijwerken worden de Up methodemigraties uitgevoerd die niet zijn toegepast in een migratiecodebestand dat door de scaffolder is gemaakt. In dit geval voert de opdracht de Up methode uit in het Migrations/{TIME STAMP}_{MIGRATION NAME}.cs bestand, waarmee de Identity tabellen, beperkingen en indexen worden gemaakt. De {TIME STAMP} placeholder is een tijdstempel en de {MIGRATION NAME} placeholder is de naam van de migratie.

Als het Identity schema al is gemaakt maar niet is toegepast op de database, moet alleen de opdracht voor het bijwerken van de database worden uitgevoerd:

Dubbelklik in Solution Explorerop Connected Services. Selecteer in het gebied SQL Server Express LocalDB van serviceafhankelijkheden het beletselteken (...) gevolgd door de opdracht Database bijwerken .

Het dialoogvenster Database bijwerken met de meest recente migratie wordt geopend. Wacht tot de DbContext-klassenamen veld zijn bijgewerkt en voordat eerdere migraties zijn geladen. Dit kan enkele seconden duren. Selecteer de knop voltooien.

Selecteer de knop Sluiten nadat de bewerking is voltooid.

U kunt de toepassing van een Identity schema bevestigen met de volgende opdracht. De uitvoer van de opdracht bevat een kolom 'applied' om weer te geven welke migraties op de database worden toegepast.

Voer in de Visual Studio Package Manager-console het volgende uit Get-Migration:

Get-Migration

Als er meer dan één databasecontext bestaat, geeft u de context op met de -Context parameter.

Authenticatie inschakelen

Werk de Startup klasse bij met code die vergelijkbaar is met de volgende:

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddRazorPages();
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
            app.UseDatabaseErrorPage();
        }
        else
        {
            app.UseExceptionHandler("/Error");
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();

        app.UseRouting();

        app.UseAuthentication();
        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapRazorPages();
        });
    }
}

UseHsts wordt aanbevolen, maar niet vereist. Zie HTTP Strict Transport Security Protocol voor meer informatie.

Layoutwijzigingen

Optioneel: Voeg het login-gedeelte (_LoginPartial) toe aan het layoutbestand.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>@ViewData["Title"] - WebRP</title>
    <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
    <link rel="stylesheet" href="~/css/site.css" />
</head>
<body>
    <header>
        <nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
            <div class="container">
                <a class="navbar-brand" asp-area="" asp-page="/Index">WebRP</a>
                <button class="navbar-toggler" type="button" data-toggle="collapse" data-target=".navbar-collapse" aria-controls="navbarSupportedContent"
                        aria-expanded="false" aria-label="Toggle navigation">
                    <span class="navbar-toggler-icon"></span>
                </button>
                <div class="navbar-collapse collapse d-sm-inline-flex flex-sm-row-reverse">
                    <partial name="_LoginPartial" />
                    <ul class="navbar-nav flex-grow-1">
                        <li class="nav-item">
                            <a class="nav-link text-dark" asp-area="" asp-page="/Index">Home</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link text-dark" asp-area="" asp-page="/Privacy">Privacy</a>
                        </li>
                    </ul>
                </div>
            </div>
        </nav>
    </header>
    <div class="container">
        <main role="main" class="pb-3">
            @RenderBody()
        </main>
    </div>

    <footer class="border-top footer text-muted">
        <div class="container">
            &copy; 2019 - WebRP - <a asp-area="" asp-page="/Privacy">Privacy</a>
        </div>
    </footer>

    <script src="~/lib/jquery/dist/jquery.js"></script>
    <script src="~/lib/bootstrap/dist/js/bootstrap.bundle.js"></script>
    <script src="~/js/site.js" asp-append-version="true"></script>

    @RenderSection("Scripts", required: false)
</body>
</html>

Configureer Identity in een Razor project met toestemming

Voer de Identity scaffolder uit:

  • Klik in Solution Explorer met de rechtermuisknop op het project >Add>New Scaffolded Item.
  • In het linkerdeelvenster van het dialoogvenster Nieuw uitgebreid item toevoegen, selecteer Identity. Selecteer Identity in het middelste deelvenster. Selecteer de knop Toevoegen.
  • Selecteer in het dialoogvenster Toevoegen Identity de gewenste opties.
    • Als u een bestaande, aangepaste indelingspagina voor Identity (_Layout.cshtml) hebt, selecteert u de bestaande indelingspagina om te voorkomen dat uw indeling wordt overschreven met onjuiste opmaak door de scaffolder. Selecteer bijvoorbeeld:
      • Pages/Shared/_Layout.cshtml voor Razor pagina's of Blazor Server projecten met bestaande Razor pagina-infrastructuur.
      • Views/Shared/_Layout.cshtml voor MVC-projecten of Blazor Server projecten met bestaande MVC-infrastructuur.
    • Voor de gegevenscontext (DbContext-klasse):
      • Selecteer uw gegevenscontextklasse. U moet ten minste één bestand selecteren om uw gegevenscontext toe te voegen.
      • Als u een gegevenscontext wilt maken en eventueel een nieuwe gebruikersklasse wilt maken, Identityselecteert u de + knop. Accepteer de standaardwaarde of geef een klasse op (bijvoorbeeld Contoso.Data.ApplicationDbContext voor een bedrijf met de naam Contoso). Als u een nieuwe gebruikersklasse wilt maken, selecteert u de knop voor + en geeft u de klasse op (bijvoorbeeld voor een bedrijf met de ContosoUser naam Contoso).
    • Selecteer de knop Toevoegen om de scaffolder uit te voeren.

Sommige Identity opties zijn geconfigureerd in Areas/Identity/IdentityHostingStartup.cs. Zie IHostingStartup voor meer informatie.

Scaffold Identity in een MVC-project zonder bestaande autorisatie

Voer de Identity scaffolder uit:

  • Klik in Solution Explorer met de rechtermuisknop op het project >Add>New Scaffolded Item.
  • In het linkerdeelvenster van het dialoogvenster Nieuw uitgebreid item toevoegen, selecteer Identity. Selecteer Identity in het middelste deelvenster. Selecteer de knop Toevoegen.
  • Selecteer in het dialoogvenster Toevoegen Identity de gewenste opties.
    • Als u een bestaande, aangepaste indelingspagina voor Identity (_Layout.cshtml) hebt, selecteert u de bestaande indelingspagina om te voorkomen dat uw indeling wordt overschreven met onjuiste opmaak door de scaffolder. Selecteer bijvoorbeeld:
      • Pages/Shared/_Layout.cshtml voor Razor pagina's of Blazor Server projecten met bestaande Razor pagina-infrastructuur.
      • Views/Shared/_Layout.cshtml voor MVC-projecten of Blazor Server projecten met bestaande MVC-infrastructuur.
    • Voor de gegevenscontext (DbContext-klasse):
      • Selecteer uw gegevenscontextklasse. U moet ten minste één bestand selecteren om uw gegevenscontext toe te voegen.
      • Als u een gegevenscontext wilt maken en eventueel een nieuwe gebruikersklasse wilt maken, Identityselecteert u de + knop. Accepteer de standaardwaarde of geef een klasse op (bijvoorbeeld Contoso.Data.ApplicationDbContext voor een bedrijf met de naam Contoso). Als u een nieuwe gebruikersklasse wilt maken, selecteert u de knop voor + en geeft u de klasse op (bijvoorbeeld voor een bedrijf met de ContosoUser naam Contoso).
    • Selecteer de knop Toevoegen om de scaffolder uit te voeren.

Optioneel: Voeg de aanmelding gedeeltelijk (_LoginPartial) toe aan het Views/Shared/_Layout.cshtml bestand:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>@ViewData["Title"] - WebRP</title>
    <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
    <link rel="stylesheet" href="~/css/site.css" />
</head>
<body>
    <header>
        <nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
            <div class="container">
                <a class="navbar-brand" asp-area="" asp-page="/Index">WebRP</a>
                <button class="navbar-toggler" type="button" data-toggle="collapse" data-target=".navbar-collapse" aria-controls="navbarSupportedContent"
                        aria-expanded="false" aria-label="Toggle navigation">
                    <span class="navbar-toggler-icon"></span>
                </button>
                <div class="navbar-collapse collapse d-sm-inline-flex flex-sm-row-reverse">
                    <partial name="_LoginPartial" />
                    <ul class="navbar-nav flex-grow-1">
                        <li class="nav-item">
                            <a class="nav-link text-dark" asp-area="" asp-page="/Index">Home</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link text-dark" asp-area="" asp-page="/Privacy">Privacy</a>
                        </li>
                    </ul>
                </div>
            </div>
        </nav>
    </header>
    <div class="container">
        <main role="main" class="pb-3">
            @RenderBody()
        </main>
    </div>

    <footer class="border-top footer text-muted">
        <div class="container">
            &copy; 2019 - WebRP - <a asp-area="" asp-page="/Privacy">Privacy</a>
        </div>
    </footer>

    <script src="~/lib/jquery/dist/jquery.js"></script>
    <script src="~/lib/bootstrap/dist/js/bootstrap.bundle.js"></script>
    <script src="~/js/site.js" asp-append-version="true"></script>

    @RenderSection("Scripts", required: false)
</body>
</html>

Verplaats het Pages/Shared/_LoginPartial.cshtml bestand naar Views/Shared/_LoginPartial.cshtml.

Identity is geconfigureerd in Areas/Identity/IdentityHostingStartup.cs. Zie IHostingStartup voor meer informatie.

Voor de gegenereerde Identity databasecode zijn EF-kernmigraties (Entity Framework) vereist. Als er geen migratie voor het genereren van het Identity schema is gemaakt en toegepast op de database, maakt u een migratie en werkt u de database bij.

Visual Studio Connected Services worden gebruikt om een EF Core migratie toe te voegen en de database bij te werken.

Dubbelklik in Solution Explorerop Connected Services. Selecteer in het SQL Server Express LocalDB-gedeelte van de Serviceafhankelijkhedenhet beletselteken (...), gevolgd door Migratie toevoegen.

Geef de migratie een migratienaam, zoals CreateIdentitySchema, een naam die de migratie beschrijft. Wacht tot de databasecontext is geladen, in het DbContext-klassenaamveld, wat enkele seconden kan duren. Selecteer voltooien om de migratie te maken.

Selecteer de knop Sluiten nadat de bewerking is voltooid.

Selecteer het beletselteken (...) opnieuw gevolgd door de opdracht Database bijwerken.

Het dialoogvenster Database bijwerken met de meest recente migratie wordt geopend. Wacht tot de DbContext-klassenamen veld zijn bijgewerkt en voordat eerdere migraties zijn geladen. Dit kan enkele seconden duren. Selecteer de knop voltooien.

Selecteer de knop Sluiten nadat de bewerking is voltooid.

Met de opdracht database bijwerken worden de Up methodemigraties uitgevoerd die niet zijn toegepast in een migratiecodebestand dat door de scaffolder is gemaakt. In dit geval voert de opdracht de Up methode uit in het Migrations/{TIME STAMP}_{MIGRATION NAME}.cs bestand, waarmee de Identity tabellen, beperkingen en indexen worden gemaakt. De {TIME STAMP} placeholder is een tijdstempel en de {MIGRATION NAME} placeholder is de naam van de migratie.

Als het Identity schema al is gemaakt maar niet is toegepast op de database, moet alleen de opdracht voor het bijwerken van de database worden uitgevoerd:

Dubbelklik in Solution Explorerop Connected Services. Selecteer in het gebied SQL Server Express LocalDB van serviceafhankelijkheden het beletselteken (...) gevolgd door de opdracht Database bijwerken .

Het dialoogvenster Database bijwerken met de meest recente migratie wordt geopend. Wacht tot de DbContext-klassenamen veld zijn bijgewerkt en voordat eerdere migraties zijn geladen. Dit kan enkele seconden duren. Selecteer de knop voltooien.

Selecteer de knop Sluiten nadat de bewerking is voltooid.

U kunt de toepassing van een Identity schema bevestigen met de volgende opdracht. De uitvoer van de opdracht bevat een kolom 'applied' om weer te geven welke migraties op de database worden toegepast.

Voer in de Visual Studio Package Manager-console het volgende uit Get-Migration:

Get-Migration

Als er meer dan één databasecontext bestaat, geeft u de context op met de -Context parameter.

Werk de Startup klasse bij met code die vergelijkbaar is met de volgende:

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllersWithViews();
        services.AddRazorPages();
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
            app.UseDatabaseErrorPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
            app.UseHsts();
        }
        app.UseHttpsRedirection();
        app.UseStaticFiles();

        app.UseRouting();

        app.UseAuthentication();
        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller=Home}/{action=Index}/{id?}");
            endpoints.MapRazorPages();
        });
    }
}

UseHsts wordt aanbevolen, maar niet vereist. Zie HTTP Strict Transport Security Protocol voor meer informatie.

Scaffold Identity in een MVC-project met autorisatie

Voer de Identity scaffolder uit:

  • Klik in Solution Explorer met de rechtermuisknop op het project >Add>New Scaffolded Item.
  • In het linkerdeelvenster van het dialoogvenster Nieuw uitgebreid item toevoegen, selecteer Identity. Selecteer Identity in het middelste deelvenster. Selecteer de knop Toevoegen.
  • Selecteer in het dialoogvenster Toevoegen Identity de gewenste opties.
    • Als u een bestaande, aangepaste indelingspagina voor Identity (_Layout.cshtml) hebt, selecteert u de bestaande indelingspagina om te voorkomen dat uw indeling wordt overschreven met onjuiste opmaak door de scaffolder. Selecteer bijvoorbeeld:
      • Pages/Shared/_Layout.cshtml voor Razor pagina's of Blazor Server projecten met bestaande Razor pagina-infrastructuur.
      • Views/Shared/_Layout.cshtml voor MVC-projecten of Blazor Server projecten met bestaande MVC-infrastructuur.
    • Voor de gegevenscontext (DbContext-klasse):
      • Selecteer uw gegevenscontextklasse. U moet ten minste één bestand selecteren om uw gegevenscontext toe te voegen.
      • Als u een gegevenscontext wilt maken en eventueel een nieuwe gebruikersklasse wilt maken, Identityselecteert u de + knop. Accepteer de standaardwaarde of geef een klasse op (bijvoorbeeld Contoso.Data.ApplicationDbContext voor een bedrijf met de naam Contoso). Als u een nieuwe gebruikersklasse wilt maken, selecteert u de knop voor + en geeft u de klasse op (bijvoorbeeld voor een bedrijf met de ContosoUser naam Contoso).
    • Selecteer de knop Toevoegen om de scaffolder uit te voeren.

Scaffold Identity naar een server-side Blazor app zonder bestaande autorisatie

Voer de Identity scaffolder uit:

  • Klik in Solution Explorer met de rechtermuisknop op het project >Add>New Scaffolded Item.
  • In het linkerdeelvenster van het dialoogvenster Nieuw uitgebreid item toevoegen, selecteer Identity. Selecteer Identity in het middelste deelvenster. Selecteer de knop Toevoegen.
  • Selecteer in het dialoogvenster Toevoegen Identity de gewenste opties.
    • Als u een bestaande, aangepaste indelingspagina voor Identity (_Layout.cshtml) hebt, selecteert u de bestaande indelingspagina om te voorkomen dat uw indeling wordt overschreven met onjuiste opmaak door de scaffolder. Selecteer bijvoorbeeld:
      • Pages/Shared/_Layout.cshtml voor Razor pagina's of Blazor Server projecten met bestaande Razor pagina-infrastructuur.
      • Views/Shared/_Layout.cshtml voor MVC-projecten of Blazor Server projecten met bestaande MVC-infrastructuur.
    • Voor de gegevenscontext (DbContext-klasse):
      • Selecteer uw gegevenscontextklasse. U moet ten minste één bestand selecteren om uw gegevenscontext toe te voegen.
      • Als u een gegevenscontext wilt maken en eventueel een nieuwe gebruikersklasse wilt maken, Identityselecteert u de + knop. Accepteer de standaardwaarde of geef een klasse op (bijvoorbeeld Contoso.Data.ApplicationDbContext voor een bedrijf met de naam Contoso). Als u een nieuwe gebruikersklasse wilt maken, selecteert u de knop voor + en geeft u de klasse op (bijvoorbeeld voor een bedrijf met de ContosoUser naam Contoso).
    • Selecteer de knop Toevoegen om de scaffolder uit te voeren.

Identity is geconfigureerd in Areas/Identity/IdentityHostingStartup.cs. Zie IHostingStartup voor meer informatie.

Migraties

Voor de gegenereerde Identity databasecode zijn EF-kernmigraties (Entity Framework) vereist. Als er geen migratie voor het genereren van het Identity schema is gemaakt en toegepast op de database, maakt u een migratie en werkt u de database bij.

Visual Studio Connected Services worden gebruikt om een EF Core migratie toe te voegen en de database bij te werken.

Dubbelklik in Solution Explorerop Connected Services. Selecteer in het SQL Server Express LocalDB-gedeelte van de Serviceafhankelijkhedenhet beletselteken (...), gevolgd door Migratie toevoegen.

Geef de migratie een migratienaam, zoals CreateIdentitySchema, een naam die de migratie beschrijft. Wacht tot de databasecontext is geladen, in het DbContext-klassenaamveld, wat enkele seconden kan duren. Selecteer voltooien om de migratie te maken.

Selecteer de knop Sluiten nadat de bewerking is voltooid.

Selecteer het beletselteken (...) opnieuw gevolgd door de opdracht Database bijwerken.

Het dialoogvenster Database bijwerken met de meest recente migratie wordt geopend. Wacht tot de DbContext-klassenamen veld zijn bijgewerkt en voordat eerdere migraties zijn geladen. Dit kan enkele seconden duren. Selecteer de knop voltooien.

Selecteer de knop Sluiten nadat de bewerking is voltooid.

Met de opdracht database bijwerken worden de Up methodemigraties uitgevoerd die niet zijn toegepast in een migratiecodebestand dat door de scaffolder is gemaakt. In dit geval voert de opdracht de Up methode uit in het Migrations/{TIME STAMP}_{MIGRATION NAME}.cs bestand, waarmee de Identity tabellen, beperkingen en indexen worden gemaakt. De {TIME STAMP} placeholder is een tijdstempel en de {MIGRATION NAME} placeholder is de naam van de migratie.

Als het Identity schema al is gemaakt maar niet is toegepast op de database, moet alleen de opdracht voor het bijwerken van de database worden uitgevoerd:

Dubbelklik in Solution Explorerop Connected Services. Selecteer in het gebied SQL Server Express LocalDB van serviceafhankelijkheden het beletselteken (...) gevolgd door de opdracht Database bijwerken .

Het dialoogvenster Database bijwerken met de meest recente migratie wordt geopend. Wacht tot de DbContext-klassenamen veld zijn bijgewerkt en voordat eerdere migraties zijn geladen. Dit kan enkele seconden duren. Selecteer de knop voltooien.

Selecteer de knop Sluiten nadat de bewerking is voltooid.

U kunt de toepassing van een Identity schema bevestigen met de volgende opdracht. De uitvoer van de opdracht bevat een kolom 'applied' om weer te geven welke migraties op de database worden toegepast.

Voer in de Visual Studio Package Manager-console het volgende uit Get-Migration:

Get-Migration

Als er meer dan één databasecontext bestaat, geeft u de context op met de -Context parameter.

Verificatie-API-eindpunten voor style

Omdat apps aan de serverzijde Blazor gebruikmaken van Razor Pages Identity pagina's, verandert de stijl van de gebruikersinterface wanneer een bezoeker tussen Identity pagina's en onderdelen navigeert. U hebt twee opties om de inconsistente stijlen aan te pakken:

Aangepaste Identity onderdelen

Een benadering om componenten voor Identity te gebruiken in plaats van pagina's is om Identity componenten te bouwen. Omdat SignInManager en UserManager niet worden ondersteund in Razor onderdelen, gebruikt u web-API-eindpunten in de Blazor app om acties van gebruikersaccounts te verwerken.

Een aangepaste indeling gebruiken met Blazor app-stijlen

De Identity pagina-indeling en -stijlen kunnen worden aangepast om pagina's te produceren die gebruikmaken van stijlen die vergelijkbaar zijn met het standaardthema Blazor . Deze benadering wordt niet gedekt door de documentatie.

Scaffold Identity voor een server-side Blazor app met autorisatie

Voer de Identity scaffolder uit:

  • Klik in Solution Explorer met de rechtermuisknop op het project >Add>New Scaffolded Item.
  • In het linkerdeelvenster van het dialoogvenster Nieuw uitgebreid item toevoegen, selecteer Identity. Selecteer Identity in het middelste deelvenster. Selecteer de knop Toevoegen.
  • Selecteer in het dialoogvenster Toevoegen Identity de gewenste opties.
    • Als u een bestaande, aangepaste indelingspagina voor Identity (_Layout.cshtml) hebt, selecteert u de bestaande indelingspagina om te voorkomen dat uw indeling wordt overschreven met onjuiste opmaak door de scaffolder. Selecteer bijvoorbeeld:
      • Pages/Shared/_Layout.cshtml voor Razor pagina's of Blazor Server projecten met bestaande Razor pagina-infrastructuur.
      • Views/Shared/_Layout.cshtml voor MVC-projecten of Blazor Server projecten met bestaande MVC-infrastructuur.
    • Voor de gegevenscontext (DbContext-klasse):
      • Selecteer uw gegevenscontextklasse. U moet ten minste één bestand selecteren om uw gegevenscontext toe te voegen.
      • Als u een gegevenscontext wilt maken en eventueel een nieuwe gebruikersklasse wilt maken, Identityselecteert u de + knop. Accepteer de standaardwaarde of geef een klasse op (bijvoorbeeld Contoso.Data.ApplicationDbContext voor een bedrijf met de naam Contoso). Als u een nieuwe gebruikersklasse wilt maken, selecteert u de knop voor + en geeft u de klasse op (bijvoorbeeld voor een bedrijf met de ContosoUser naam Contoso).
    • Selecteer de knop Toevoegen om de scaffolder uit te voeren.

Sommige Identity opties zijn geconfigureerd in Areas/Identity/IdentityHostingStartup.cs. Zie IHostingStartup voor meer informatie.

Blazor-apps aan de clientzijde

Apps aan de clientzijde Blazor gebruiken hun eigen Identity UI-benaderingen en kunnen geen ASP.NET Core-scaffolding Identity gebruiken. Server-side ASP.NET Core-apps van gehoste Blazor oplossingen kunnen de Pages/MVC-richtlijnen in dit artikel volgen en zijn geconfigureerd net als elk ander type ASP.NET Core-app die Razor ondersteunt.

Het Blazor framework bevat Razor geen onderdeelversies van Identity UI-pagina's. Identity UI-onderdelen Razor kunnen aangepast worden gebouwd of verkregen uit niet-ondersteunde bronnen van derden.

Zie de Blazor beveiligings- en Identity artikelen voor meer informatie.

Volledige UI-bron Identity maken

Als u de volledige controle over de Identity gebruikersinterface wilt behouden, voert u de Identity scaffolder uit en selecteert u Alle bestanden overschrijven.

De volgende gemarkeerde code toont de wijzigingen voor het vervangen van de standaardgebruikersinterface IdentityIdentity in een ASP.NET Core 2.1-web-app. Mogelijk wilt u dit doen om volledige controle over de Identity gebruikersinterface te hebben.

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<CookiePolicyOptions>(options =>
    {
        options.CheckConsentNeeded = context => true;
        options.MinimumSameSitePolicy = SameSiteMode.None;
    });

    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(
            Configuration.GetConnectionString("DefaultConnection")));

    services.AddIdentity<IdentityUser, IdentityRole>()
        // services.AddDefaultIdentity<IdentityUser>()
        .AddEntityFrameworkStores<ApplicationDbContext>()
        .AddDefaultTokenProviders();

    services.AddMvc()
        .AddRazorPagesOptions(options =>
        {
            options.Conventions.AuthorizeAreaFolder("Identity", "/Account/Manage");
            options.Conventions.AuthorizeAreaPage("Identity", "/Account/Logout");
        });

    services.ConfigureApplicationCookie(options =>
    {
        options.LoginPath = $"/Identity/Account/Login";
        options.LogoutPath = $"/Identity/Account/Logout";
        options.AccessDeniedPath = $"/Identity/Account/AccessDenied";
    });

    // using Microsoft.AspNetCore.Identity.UI.Services;
    services.AddSingleton<IEmailSender, EmailSender>();
}

De standaardwaarde Identity wordt vervangen in de volgende code:

services.AddIdentity<IdentityUser, IdentityRole>()
    // services.AddDefaultIdentity<IdentityUser>()
    .AddEntityFrameworkStores<ApplicationDbContext>()
    .AddDefaultTokenProviders();

De volgende code stelt de LoginPath, LogoutPath, en AccessDeniedPath in:

services.ConfigureApplicationCookie(options =>
{
    options.LoginPath = $"/Identity/Account/Login";
    options.LogoutPath = $"/Identity/Account/Logout";
    options.AccessDeniedPath = $"/Identity/Account/AccessDenied";
});

Registreer een IEmailSender implementatie, bijvoorbeeld:

// using Microsoft.AspNetCore.Identity.UI.Services;
services.AddSingleton<IEmailSender, EmailSender>();
public class EmailSender : IEmailSender
{
    public Task SendEmailAsync(string email, string subject, string message)
    {
        return Task.CompletedTask;
    }
}

Wachtwoordconfiguratie

Als PasswordOptions zijn geconfigureerd in Startup.ConfigureServices, is mogelijk de configuratie van de [StringLength]-eigenschap vereist voor de -eigenschap in gegenereerde Password-pagina's. InputModel Password de eigenschappen zijn te vinden in de volgende bestanden:

  • Areas/Identity/Pages/Account/Register.cshtml.cs
  • Areas/Identity/Pages/Account/ResetPassword.cshtml.cs

Een pagina uitschakelen

In deze sectie ziet u hoe u de registratiepagina uitschakelt, maar de methode kan worden gebruikt om een pagina uit te schakelen.

Gebruikersregistratie uitschakelen:

  • Steiger Identity. Neem Account.Register, Account.Login en Account.RegisterConfirmation op. Voorbeeld:

    dotnet aspnet-codegenerator identity -dc RPauth.Data.ApplicationDbContext --files "Account.Register;Account.Login;Account.RegisterConfirmation"
    
  • Werk Areas/Identity/Pages/Account/Register.cshtml.cs bij zodat gebruikers zich niet kunnen registreren vanaf dit eindpunt:

    public class RegisterModel : PageModel
    {
        public IActionResult OnGet()
        {
            return RedirectToPage("Login");
        }
    
        public IActionResult OnPost()
        {
            return RedirectToPage("Login");
        }
    }
    
  • Update Areas/Identity/Pages/Account/Register.cshtml om consistent te zijn met de voorgaande wijzigingen:

    @page
    @model RegisterModel
    @{
        ViewData["Title"] = "Go to Login";
    }
    
    <h1>@ViewData["Title"]</h1>
    
    <li class="nav-item">
        <a class="nav-link text-dark" asp-area="Identity" asp-page="/Account/Login">Login</a>
    </li>
    
  • Commentaar toevoegen aan of verwijderen van de registratiekoppeling Areas/Identity/Pages/Account/Login.cshtml

    @*
    <p>
        <a asp-page="./Register" asp-route-returnUrl="@Model.ReturnUrl">Register as a new user</a>
    </p>
    *@
    
  • Werk de Areas/Identity/Pages/Account/RegisterConfirmation pagina bij.

    • Verwijder de code en koppelingen uit het cshtml-bestand.
    • Verwijder de bevestigingscode uit de PageModel.
    [AllowAnonymous]
      public class RegisterConfirmationModel : PageModel
      {
          public IActionResult OnGet()
          {  
              return Page();
          }
      }
    

Een andere app gebruiken om gebruikers toe te voegen

Geef een mechanisme op om gebruikers buiten de web-app toe te voegen. Opties voor het toevoegen van gebruikers zijn:

  • Een toegewezen beheerweb-app.
  • Een console-app.

In de volgende code wordt één benadering beschreven voor het toevoegen van gebruikers:

  • Een lijst met gebruikers wordt in het geheugen gelezen.
  • Voor elke gebruiker wordt een sterk uniek wachtwoord gegenereerd.
  • De gebruiker wordt toegevoegd aan de Identity database.
  • De gebruiker krijgt een melding en wordt verteld het wachtwoord te wijzigen.
public class Program
{
    public static void Main(string[] args)
    {
        var host = CreateHostBuilder(args).Build();

        using (var scope = host.Services.CreateScope())
        {
            var services = scope.ServiceProvider;

            try
            {
                var context = services.GetRequiredService<AppDbCntx>();
                context.Database.Migrate();

                var config = host.Services.GetRequiredService<IConfiguration>();
                var userList = config.GetSection("userList").Get<List<string>>();

                SeedData.Initialize(services, userList).Wait();
            }
            catch (Exception ex)
            {
                var logger = services.GetRequiredService<ILogger<Program>>();
                logger.LogError(ex, "An error occurred adding users.");
            }
        }

        host.Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}

De volgende code geeft een overzicht van het toevoegen van een gebruiker:


public static async Task Initialize(IServiceProvider serviceProvider,
                                    List<string> userList)
{
    var userManager = serviceProvider.GetService<UserManager<IdentityUser>>();

    foreach (var userName in userList)
    {
        var userPassword = GenerateSecurePassword();
        var userId = await EnsureUser(userManager, userName, userPassword);

        NotifyUser(userName, userPassword);
    }
}

private static async Task<string> EnsureUser(UserManager<IdentityUser> userManager,
                                             string userName, string userPassword)
{
    var user = await userManager.FindByNameAsync(userName);

    if (user == null)
    {
        user = new IdentityUser(userName)
        {
            EmailConfirmed = true
        };
        await userManager.CreateAsync(user, userPassword);
    }

    return user.Id;
}

Een vergelijkbare benadering kan worden gevolgd voor productiescenario's.

Publicatie van statische Identity assets voorkomen

Raadpleeg Identity om te leren hoe u kunt voorkomen dat statische Identity assets worden gepubliceerd in de hoofdmap van het web.

Aanvullende bronnen

Wijzigingen in verificatiecode in ASP.NET Core 2.1 of hoger