Generování uživatelského rozhraní Identity v projektech ASP.NET Core

Autor: Rick Anderson

ASP.NET Core poskytuje ASP.NET Core Identity jako knihovnu Razortříd. Aplikace, které zahrnují Identity , mohou použít scaffolder k selektivnímu přidání zdrojového kódu obsaženého v knihovně IdentityRazor tříd (RCL). Můžete chtít vygenerovat zdrojový kód, abyste mohli kód upravit a změnit chování. Můžete například dát scaffolder pokyn, aby vygeneroval kód použitý v registraci. Vygenerovaný kód má přednost před stejným kódem v seznamu Identity RCL. Pokud chcete získat úplnou kontrolu nad uživatelským rozhraním a nepoužívat výchozí seznam RCL, přečtěte si část Vytvoření úplného Identity zdroje uživatelského rozhraní.

Aplikace, které nezahrnují ověřování, mohou použít scaffolder pro přidání balíčku RCLIdentity. Máte možnost vybrat Identity kód, který se má vygenerovat.

I když scaffolder generuje většinu potřebného kódu, musíte aktualizovat projekt, aby se proces dokončil. Tento dokument vysvětluje kroky potřebné k dokončení Identity aktualizace generování uživatelského rozhraní.

Doporučujeme použít systém správy zdrojového kódu, který zobrazuje rozdíly mezi soubory a umožňuje vrátit se zpět ze změn. Zkontrolujte změny po spuštění Identity nástroje scaffolder.

Služby se vyžadují při použití dvoufaktorového ověřování, potvrzení účtu a obnovení hesla a dalších funkcí zabezpečení s Identity. Služby nebo zástupné procedury služeb se při generování nevygenerují Identity. Služby, které mají tyto funkce povolit, musí být přidány ručně. Příklad najdete v tématu Vyžadovat potvrzení e-mailu.

Aplikace vytvořené pomocí jednotlivých účtů by obvykle neměly vytvářet nový kontext dat.

Generování uživatelského rozhraní Identity do Razor projektu bez existující autorizace

Nainstalujte balíček NuGet Microsoft.VisualStudio.Web.CodeGeneration.Design.

Poznámka:

Pokyny k přidávání balíčků do aplikací .NET najdete v článcích v části Instalace a správa balíčků na webu Pracovní postup používání balíčků (dokumentace k NuGetu). Ověřte správné verze balíčků na NuGet.org.


Identity Spusťte scaffolder:

  • V Průzkumník řešení klikněte pravým tlačítkem myši na projekt> Přidat>novou vygenerovanou položku.
  • V levém podokně dialogového okna Přidat novou vygenerovanou položku vyberte Identity. Vyberte Identity v prostředním podokně. Vyberte tlačítko Přidat.
  • V dialogovém okně Přidat Identity vyberte požadované možnosti.
    • Pokud máte existující přizpůsobenou stránku rozložení (Identity_Layout.cshtml), vyberte existující stránku rozložení, abyste se vyhnuli přepsání rozložení nesprávným kódem od správce. Vyberte například jednu z těchto akcí:
      • Pages/Shared/_Layout.cshtml pro Razor stránky nebo Blazor Server projekty s existující Razor infrastrukturou Pages.
      • Views/Shared/_Layout.cshtml pro projekty nebo Blazor Server projekty MVC se stávající infrastrukturou MVC.
    • Pro kontext dat (DbContext – třída):
      • Vyberte třídu kontextu dat. Abyste mohli přidat kontext dat, musíte vybrat alespoň jeden soubor.
      • Pokud chcete vytvořit kontext dat a případně vytvořit novou třídu Identityuživatele, vyberte + tlačítko. Přijměte výchozí hodnotu nebo zadejte třídu (například Contoso.Data.ApplicationDbContext pro společnost s názvem Contoso). Pokud chcete vytvořit novou třídu uživatele, vyberte + tlačítko pro třídu User a zadejte třídu (například ContosoUser pro společnost s názvem Contoso).
    • Výběrem tlačítka Přidat spusťte nástroj scaffolder.

Migrace, useAuthentication a rozložení

Vygenerovaný Identity databázový kód vyžaduje migrace Entity Framework Core. Pokud migrace pro vytvoření schématu Identity nebyla vytvořena a použita pro databázi, vytvořte migraci a aktualizujte databázi. Spusťte například následující příkazy:

V konzole sady Visual Studio Správce balíčků:

Install-Package Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore
Add-Migration CreateIdentitySchema
Update-Database

Parametr názvu "CreateIdentitySchema" pro Add-Migration příkaz je libovolný. "CreateIdentitySchema" popisuje migraci.

Identity Pokud schéma již bylo vytvořeno, ale není použito v databázi, je nutné spustit pouze příkaz k aktualizaci databáze:

V konzole Správce balíčků sady Visual Studio spusťteUpdate-Database:

Update-Database

Aplikaci schématu Identity můžete potvrdit pomocí následujícího příkazu. Výstup příkazu obsahuje sloupec "applied", který ukazuje, které migrace se použijí v databázi.

V konzole Správce balíčků sady Visual Studio spusťteGet-Migration:

Get-Migration

Pokud existuje více kontextů databáze, zadejte kontext pomocí parametru -Context .

Změny rozložení

Volitelné: Přidání částečného přihlášení (_LoginPartial) do souboru rozložení:

<!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>

Generování uživatelského rozhraní Identity do Razor projektu s autorizací

Nainstalujte balíček NuGet Microsoft.VisualStudio.Web.CodeGeneration.Design.

Poznámka:

Pokyny k přidávání balíčků do aplikací .NET najdete v článcích v části Instalace a správa balíčků na webu Pracovní postup používání balíčků (dokumentace k NuGetu). Ověřte správné verze balíčků na NuGet.org.


Identity Spusťte scaffolder:

  • V Průzkumník řešení klikněte pravým tlačítkem myši na projekt> Přidat>novou vygenerovanou položku.
  • V levém podokně dialogového okna Přidat novou vygenerovanou položku vyberte Identity. Vyberte Identity v prostředním podokně. Vyberte tlačítko Přidat.
  • V dialogovém okně Přidat Identity vyberte požadované možnosti.
    • Pokud máte existující přizpůsobenou stránku rozložení (Identity_Layout.cshtml), vyberte existující stránku rozložení, abyste se vyhnuli přepsání rozložení nesprávným kódem od správce. Vyberte například jednu z těchto akcí:
      • Pages/Shared/_Layout.cshtml pro Razor stránky nebo Blazor Server projekty s existující Razor infrastrukturou Pages.
      • Views/Shared/_Layout.cshtml pro projekty nebo Blazor Server projekty MVC se stávající infrastrukturou MVC.
    • Pro kontext dat (DbContext – třída):
      • Vyberte třídu kontextu dat. Abyste mohli přidat kontext dat, musíte vybrat alespoň jeden soubor.
      • Pokud chcete vytvořit kontext dat a případně vytvořit novou třídu Identityuživatele, vyberte + tlačítko. Přijměte výchozí hodnotu nebo zadejte třídu (například Contoso.Data.ApplicationDbContext pro společnost s názvem Contoso). Pokud chcete vytvořit novou třídu uživatele, vyberte + tlačítko pro třídu User a zadejte třídu (například ContosoUser pro společnost s názvem Contoso).
    • Výběrem tlačítka Přidat spusťte nástroj scaffolder.

Generování uživatelského rozhraní Identity do projektu MVC bez existující autorizace

Nainstalujte balíček NuGet Microsoft.VisualStudio.Web.CodeGeneration.Design.

Poznámka:

Pokyny k přidávání balíčků do aplikací .NET najdete v článcích v části Instalace a správa balíčků na webu Pracovní postup používání balíčků (dokumentace k NuGetu). Ověřte správné verze balíčků na NuGet.org.


Identity Spusťte scaffolder:

  • V Průzkumník řešení klikněte pravým tlačítkem myši na projekt> Přidat>novou vygenerovanou položku.
  • V levém podokně dialogového okna Přidat novou vygenerovanou položku vyberte Identity. Vyberte Identity v prostředním podokně. Vyberte tlačítko Přidat.
  • V dialogovém okně Přidat Identity vyberte požadované možnosti.
    • Pokud máte existující přizpůsobenou stránku rozložení (Identity_Layout.cshtml), vyberte existující stránku rozložení, abyste se vyhnuli přepsání rozložení nesprávným kódem od správce. Vyberte například jednu z těchto akcí:
      • Pages/Shared/_Layout.cshtml pro Razor stránky nebo Blazor Server projekty s existující Razor infrastrukturou Pages.
      • Views/Shared/_Layout.cshtml pro projekty nebo Blazor Server projekty MVC se stávající infrastrukturou MVC.
    • Pro kontext dat (DbContext – třída):
      • Vyberte třídu kontextu dat. Abyste mohli přidat kontext dat, musíte vybrat alespoň jeden soubor.
      • Pokud chcete vytvořit kontext dat a případně vytvořit novou třídu Identityuživatele, vyberte + tlačítko. Přijměte výchozí hodnotu nebo zadejte třídu (například Contoso.Data.ApplicationDbContext pro společnost s názvem Contoso). Pokud chcete vytvořit novou třídu uživatele, vyberte + tlačítko pro třídu User a zadejte třídu (například ContosoUser pro společnost s názvem Contoso).
    • Výběrem tlačítka Přidat spusťte nástroj scaffolder.

Volitelné: Přidejte do souboru částečnou (_LoginPartial) Views/Shared/_Layout.cshtml přihlášení:

<!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>

Vygenerovaný Identity databázový kód vyžaduje migrace Entity Framework Core. Pokud migrace pro vytvoření schématu Identity nebyla vytvořena a použita pro databázi, vytvořte migraci a aktualizujte databázi. Spusťte například následující příkazy:

V konzole sady Visual Studio Správce balíčků:

Install-Package Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore
Add-Migration CreateIdentitySchema
Update-Database

Parametr názvu "CreateIdentitySchema" pro Add-Migration příkaz je libovolný. "CreateIdentitySchema" popisuje migraci.

Identity Pokud schéma již bylo vytvořeno, ale není použito v databázi, je nutné spustit pouze příkaz k aktualizaci databáze:

V konzole Správce balíčků sady Visual Studio spusťteUpdate-Database:

Update-Database

Aplikaci schématu Identity můžete potvrdit pomocí následujícího příkazu. Výstup příkazu obsahuje sloupec "applied", který ukazuje, které migrace se použijí v databázi.

V konzole Správce balíčků sady Visual Studio spusťteGet-Migration:

Get-Migration

Pokud existuje více kontextů databáze, zadejte kontext pomocí parametru -Context .

Program.cs Přidejte MapRazorPages ho, jak je znázorněno v následujícím zvýrazněném kódu:

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();

Generování uživatelského rozhraní Identity do projektu MVC s autorizací

Nainstalujte balíček NuGet Microsoft.VisualStudio.Web.CodeGeneration.Design.

Poznámka:

Pokyny k přidávání balíčků do aplikací .NET najdete v článcích v části Instalace a správa balíčků na webu Pracovní postup používání balíčků (dokumentace k NuGetu). Ověřte správné verze balíčků na NuGet.org.


Identity Spusťte scaffolder:

  • V Průzkumník řešení klikněte pravým tlačítkem myši na projekt> Přidat>novou vygenerovanou položku.
  • V levém podokně dialogového okna Přidat novou vygenerovanou položku vyberte Identity. Vyberte Identity v prostředním podokně. Vyberte tlačítko Přidat.
  • V dialogovém okně Přidat Identity vyberte požadované možnosti.
    • Pokud máte existující přizpůsobenou stránku rozložení (Identity_Layout.cshtml), vyberte existující stránku rozložení, abyste se vyhnuli přepsání rozložení nesprávným kódem od správce. Vyberte například jednu z těchto akcí:
      • Pages/Shared/_Layout.cshtml pro Razor stránky nebo Blazor Server projekty s existující Razor infrastrukturou Pages.
      • Views/Shared/_Layout.cshtml pro projekty nebo Blazor Server projekty MVC se stávající infrastrukturou MVC.
    • Pro kontext dat (DbContext – třída):
      • Vyberte třídu kontextu dat. Abyste mohli přidat kontext dat, musíte vybrat alespoň jeden soubor.
      • Pokud chcete vytvořit kontext dat a případně vytvořit novou třídu Identityuživatele, vyberte + tlačítko. Přijměte výchozí hodnotu nebo zadejte třídu (například Contoso.Data.ApplicationDbContext pro společnost s názvem Contoso). Pokud chcete vytvořit novou třídu uživatele, vyberte + tlačítko pro třídu User a zadejte třídu (například ContosoUser pro společnost s názvem Contoso).
    • Výběrem tlačítka Přidat spusťte nástroj scaffolder.

Blazor Klientské aplikace

Blazor Klientské aplikace používají vlastní Identity přístupy k uživatelskému rozhraní a nemůžou používat generování uživatelského rozhraní ASP.NET CoreIdentity.

Na straně serveru můžou aplikace ASP.NET Core postupovat podle Razor pokynů pages/MVC v tomto článku a konfigurují se stejně jako jakýkoli jiný typ aplikace ASP.NET Core, která podporuje Identity. Rozhraní Blazor používá při generování BlazorIdentity do webové aplikace verze součástí (.razor) Identity stránek uživatelského rozhraní (.cshtml).Razor

Další informace najdete v tématech Blazor Zabezpečení a Identity články.

Vytvoření úplného Identity zdroje uživatelského rozhraní

Pokud chcete zachovat úplnou kontrolu nad uživatelským Identity rozhraním, spusťte Identity správce uživatelského rozhraní a vyberte Přepsat všechny soubory.

Konfigurace hesla

Pokud PasswordOptions jsou nakonfigurovány v Startup.ConfigureServices, [StringLength] konfigurace atributu může být vyžadována Password pro vlastnost na vygenerovaných Identity stránkách. InputModelPassword vlastnosti jsou nalezeny v následujících souborech:

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

Zakázání stránky

V této části se dozvíte, jak zakázat stránku pro registraci, ale můžete ji použít k zakázání libovolné stránky.

Zakázání registrace uživatele:

  • Lešení Identity. Zahrnout Account.Register, Account.Login a Account.RegisterConfirmation. Příklad:

    dotnet aspnet-codegenerator identity -dc RPauth.Data.ApplicationDbContext --files "Account.Register;Account.Login;Account.RegisterConfirmation"
    
  • Aktualizujte Areas/Identity/Pages/Account/Register.cshtml.cs , aby se uživatelé nemohli zaregistrovat z tohoto koncového bodu:

    public class RegisterModel : PageModel
    {
        public IActionResult OnGet()
        {
            return RedirectToPage("Login");
        }
    
        public IActionResult OnPost()
        {
            return RedirectToPage("Login");
        }
    }
    
  • Aktualizujte Areas/Identity/Pages/Account/Register.cshtml , aby byly konzistentní s předchozími změnami:

    @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>
    
  • Zakomentujte nebo odeberte registrační odkaz z Areas/Identity/Pages/Account/Login.cshtml

    @*
    <p>
        <a asp-page="./Register" asp-route-returnUrl="@Model.ReturnUrl">Register as a new user</a>
    </p>
    *@
    
  • Aktualizujte stránku Areas//IdentityPages/Account/RegisterConfirmation.

    • Odeberte kód a odkazy ze souboru cshtml.
    • Odeberte potvrzovací kód z PageModel:
    [AllowAnonymous]
      public class RegisterConfirmationModel : PageModel
      {
          public IActionResult OnGet()
          {  
              return Page();
          }
      }
    

Přidání uživatelů pomocí jiné aplikace

Zadejte mechanismus pro přidání uživatelů mimo webovou aplikaci. Mezi možnosti přidání uživatelů patří:

  • Vyhrazená webová aplikace pro správu
  • Konzolová aplikace.

Následující kód popisuje jeden přístup k přidávání uživatelů:

  • Seznam uživatelů se čte do paměti.
  • Pro každého uživatele se vygeneruje silné jedinečné heslo.
  • Uživatel se přidá do Identity databáze.
  • Uživateli se zobrazí oznámení a bude mu řečeno, aby změnil heslo.
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>();
            });
}

Následující kód popisuje přidání uživatele:


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;
}

Podobný přístup je možné sledovat v produkčních scénářích.

Zabránění publikování statických Identity prostředků

Pokud chcete zabránit publikování statických Identity prostředků do kořenového adresáře webu, přečtěte si téma Úvod do Identity ASP.NET Core.

ASP.NET Core poskytuje ASP.NET Core Identity jako knihovnu Razortříd. Aplikace, které zahrnují Identity , mohou použít scaffolder k selektivnímu přidání zdrojového kódu obsaženého v knihovně IdentityRazor tříd (RCL). Můžete chtít vygenerovat zdrojový kód, abyste mohli kód upravit a změnit chování. Můžete například dát scaffolder pokyn, aby vygeneroval kód použitý v registraci. Vygenerovaný kód má přednost před stejným kódem v seznamu Identity RCL. Pokud chcete získat úplnou kontrolu nad uživatelským rozhraním a nepoužívat výchozí seznam RCL, přečtěte si část Vytvoření úplného Identity zdroje uživatelského rozhraní.

Aplikace, které nezahrnují ověřování, mohou použít scaffolder pro přidání balíčku RCLIdentity. Máte možnost vybrat Identity kód, který se má vygenerovat.

I když scaffolder generuje většinu potřebného kódu, musíte aktualizovat projekt, aby se proces dokončil. Tento dokument vysvětluje kroky potřebné k dokončení Identity aktualizace generování uživatelského rozhraní.

Doporučujeme použít systém správy zdrojového kódu, který zobrazuje rozdíly mezi soubory a umožňuje vrátit se zpět ze změn. Zkontrolujte změny po spuštění Identity nástroje scaffolder.

Služby se vyžadují při použití dvoufaktorového ověřování, potvrzení účtu a obnovení hesla a dalších funkcí zabezpečení s Identity. Služby nebo zástupné procedury služeb se při generování nevygenerují Identity. Služby, které mají tyto funkce povolit, musí být přidány ručně. Příklad najdete v tématu Vyžadovat potvrzení e-mailu.

Aplikace vytvořené pomocí jednotlivých účtů by obvykle neměly vytvářet nový kontext dat.

Generování uživatelského rozhraní Identity do Razor projektu bez existující autorizace

Nainstalujte balíček NuGet Microsoft.VisualStudio.Web.CodeGeneration.Design.

Poznámka:

Pokyny k přidávání balíčků do aplikací .NET najdete v článcích v části Instalace a správa balíčků na webu Pracovní postup používání balíčků (dokumentace k NuGetu). Ověřte správné verze balíčků na NuGet.org.


Identity Spusťte scaffolder:

  • V Průzkumník řešení klikněte pravým tlačítkem myši na projekt> Přidat>novou vygenerovanou položku.
  • V levém podokně dialogového okna Přidat novou vygenerovanou položku vyberte Identity. Vyberte Identity v prostředním podokně. Vyberte tlačítko Přidat.
  • V dialogovém okně Přidat Identity vyberte požadované možnosti.
    • Pokud máte existující přizpůsobenou stránku rozložení (Identity_Layout.cshtml), vyberte existující stránku rozložení, abyste se vyhnuli přepsání rozložení nesprávným kódem od správce. Vyberte například jednu z těchto akcí:
      • Pages/Shared/_Layout.cshtml pro Razor stránky nebo Blazor Server projekty s existující Razor infrastrukturou Pages.
      • Views/Shared/_Layout.cshtml pro projekty nebo Blazor Server projekty MVC se stávající infrastrukturou MVC.
    • Pro kontext dat (DbContext – třída):
      • Vyberte třídu kontextu dat. Abyste mohli přidat kontext dat, musíte vybrat alespoň jeden soubor.
      • Pokud chcete vytvořit kontext dat a případně vytvořit novou třídu Identityuživatele, vyberte + tlačítko. Přijměte výchozí hodnotu nebo zadejte třídu (například Contoso.Data.ApplicationDbContext pro společnost s názvem Contoso). Pokud chcete vytvořit novou třídu uživatele, vyberte + tlačítko pro třídu User a zadejte třídu (například ContosoUser pro společnost s názvem Contoso).
    • Výběrem tlačítka Přidat spusťte nástroj scaffolder.

Migrace, useAuthentication a rozložení

Vygenerovaný Identity databázový kód vyžaduje migrace Entity Framework Core. Pokud migrace pro vytvoření schématu Identity nebyla vytvořena a použita pro databázi, vytvořte migraci a aktualizujte databázi. Spusťte například následující příkazy:

V konzole sady Visual Studio Správce balíčků:

Install-Package Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore
Add-Migration CreateIdentitySchema
Update-Database

Parametr názvu "CreateIdentitySchema" pro Add-Migration příkaz je libovolný. "CreateIdentitySchema" popisuje migraci.

Identity Pokud schéma již bylo vytvořeno, ale není použito v databázi, je nutné spustit pouze příkaz k aktualizaci databáze:

V konzole Správce balíčků sady Visual Studio spusťteUpdate-Database:

Update-Database

Aplikaci schématu Identity můžete potvrdit pomocí následujícího příkazu. Výstup příkazu obsahuje sloupec "applied", který ukazuje, které migrace se použijí v databázi.

V konzole Správce balíčků sady Visual Studio spusťteGet-Migration:

Get-Migration

Pokud existuje více kontextů databáze, zadejte kontext pomocí parametru -Context .

Změny rozložení

Volitelné: Přidání částečného přihlášení (_LoginPartial) do souboru rozložení:

<!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>

Generování uživatelského rozhraní Identity do Razor projektu s autorizací

Nainstalujte balíček NuGet Microsoft.VisualStudio.Web.CodeGeneration.Design.

Poznámka:

Pokyny k přidávání balíčků do aplikací .NET najdete v článcích v části Instalace a správa balíčků na webu Pracovní postup používání balíčků (dokumentace k NuGetu). Ověřte správné verze balíčků na NuGet.org.


Identity Spusťte scaffolder:

  • V Průzkumník řešení klikněte pravým tlačítkem myši na projekt> Přidat>novou vygenerovanou položku.
  • V levém podokně dialogového okna Přidat novou vygenerovanou položku vyberte Identity. Vyberte Identity v prostředním podokně. Vyberte tlačítko Přidat.
  • V dialogovém okně Přidat Identity vyberte požadované možnosti.
    • Pokud máte existující přizpůsobenou stránku rozložení (Identity_Layout.cshtml), vyberte existující stránku rozložení, abyste se vyhnuli přepsání rozložení nesprávným kódem od správce. Vyberte například jednu z těchto akcí:
      • Pages/Shared/_Layout.cshtml pro Razor stránky nebo Blazor Server projekty s existující Razor infrastrukturou Pages.
      • Views/Shared/_Layout.cshtml pro projekty nebo Blazor Server projekty MVC se stávající infrastrukturou MVC.
    • Pro kontext dat (DbContext – třída):
      • Vyberte třídu kontextu dat. Abyste mohli přidat kontext dat, musíte vybrat alespoň jeden soubor.
      • Pokud chcete vytvořit kontext dat a případně vytvořit novou třídu Identityuživatele, vyberte + tlačítko. Přijměte výchozí hodnotu nebo zadejte třídu (například Contoso.Data.ApplicationDbContext pro společnost s názvem Contoso). Pokud chcete vytvořit novou třídu uživatele, vyberte + tlačítko pro třídu User a zadejte třídu (například ContosoUser pro společnost s názvem Contoso).
    • Výběrem tlačítka Přidat spusťte nástroj scaffolder.

Generování uživatelského rozhraní Identity do projektu MVC bez existující autorizace

Nainstalujte balíček NuGet Microsoft.VisualStudio.Web.CodeGeneration.Design.

Poznámka:

Pokyny k přidávání balíčků do aplikací .NET najdete v článcích v části Instalace a správa balíčků na webu Pracovní postup používání balíčků (dokumentace k NuGetu). Ověřte správné verze balíčků na NuGet.org.


Identity Spusťte scaffolder:

  • V Průzkumník řešení klikněte pravým tlačítkem myši na projekt> Přidat>novou vygenerovanou položku.
  • V levém podokně dialogového okna Přidat novou vygenerovanou položku vyberte Identity. Vyberte Identity v prostředním podokně. Vyberte tlačítko Přidat.
  • V dialogovém okně Přidat Identity vyberte požadované možnosti.
    • Pokud máte existující přizpůsobenou stránku rozložení (Identity_Layout.cshtml), vyberte existující stránku rozložení, abyste se vyhnuli přepsání rozložení nesprávným kódem od správce. Vyberte například jednu z těchto akcí:
      • Pages/Shared/_Layout.cshtml pro Razor stránky nebo Blazor Server projekty s existující Razor infrastrukturou Pages.
      • Views/Shared/_Layout.cshtml pro projekty nebo Blazor Server projekty MVC se stávající infrastrukturou MVC.
    • Pro kontext dat (DbContext – třída):
      • Vyberte třídu kontextu dat. Abyste mohli přidat kontext dat, musíte vybrat alespoň jeden soubor.
      • Pokud chcete vytvořit kontext dat a případně vytvořit novou třídu Identityuživatele, vyberte + tlačítko. Přijměte výchozí hodnotu nebo zadejte třídu (například Contoso.Data.ApplicationDbContext pro společnost s názvem Contoso). Pokud chcete vytvořit novou třídu uživatele, vyberte + tlačítko pro třídu User a zadejte třídu (například ContosoUser pro společnost s názvem Contoso).
    • Výběrem tlačítka Přidat spusťte nástroj scaffolder.

Volitelné: Přidejte do souboru částečnou (_LoginPartial) Views/Shared/_Layout.cshtml přihlášení:

<!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>

Vygenerovaný Identity databázový kód vyžaduje migrace Entity Framework Core. Pokud migrace pro vytvoření schématu Identity nebyla vytvořena a použita pro databázi, vytvořte migraci a aktualizujte databázi. Spusťte například následující příkazy:

V konzole sady Visual Studio Správce balíčků:

Install-Package Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore
Add-Migration CreateIdentitySchema
Update-Database

Parametr názvu "CreateIdentitySchema" pro Add-Migration příkaz je libovolný. "CreateIdentitySchema" popisuje migraci.

Identity Pokud schéma již bylo vytvořeno, ale není použito v databázi, je nutné spustit pouze příkaz k aktualizaci databáze:

V konzole Správce balíčků sady Visual Studio spusťteUpdate-Database:

Update-Database

Aplikaci schématu Identity můžete potvrdit pomocí následujícího příkazu. Výstup příkazu obsahuje sloupec "applied", který ukazuje, které migrace se použijí v databázi.

V konzole Správce balíčků sady Visual Studio spusťteGet-Migration:

Get-Migration

Pokud existuje více kontextů databáze, zadejte kontext pomocí parametru -Context .

Program.cs Přidejte MapRazorPages ho, jak je znázorněno v následujícím zvýrazněném kódu:

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();

Generování uživatelského rozhraní Identity do projektu MVC s autorizací

Nainstalujte balíček NuGet Microsoft.VisualStudio.Web.CodeGeneration.Design.

Poznámka:

Pokyny k přidávání balíčků do aplikací .NET najdete v článcích v části Instalace a správa balíčků na webu Pracovní postup používání balíčků (dokumentace k NuGetu). Ověřte správné verze balíčků na NuGet.org.


Identity Spusťte scaffolder:

  • V Průzkumník řešení klikněte pravým tlačítkem myši na projekt> Přidat>novou vygenerovanou položku.
  • V levém podokně dialogového okna Přidat novou vygenerovanou položku vyberte Identity. Vyberte Identity v prostředním podokně. Vyberte tlačítko Přidat.
  • V dialogovém okně Přidat Identity vyberte požadované možnosti.
    • Pokud máte existující přizpůsobenou stránku rozložení (Identity_Layout.cshtml), vyberte existující stránku rozložení, abyste se vyhnuli přepsání rozložení nesprávným kódem od správce. Vyberte například jednu z těchto akcí:
      • Pages/Shared/_Layout.cshtml pro Razor stránky nebo Blazor Server projekty s existující Razor infrastrukturou Pages.
      • Views/Shared/_Layout.cshtml pro projekty nebo Blazor Server projekty MVC se stávající infrastrukturou MVC.
    • Pro kontext dat (DbContext – třída):
      • Vyberte třídu kontextu dat. Abyste mohli přidat kontext dat, musíte vybrat alespoň jeden soubor.
      • Pokud chcete vytvořit kontext dat a případně vytvořit novou třídu Identityuživatele, vyberte + tlačítko. Přijměte výchozí hodnotu nebo zadejte třídu (například Contoso.Data.ApplicationDbContext pro společnost s názvem Contoso). Pokud chcete vytvořit novou třídu uživatele, vyberte + tlačítko pro třídu User a zadejte třídu (například ContosoUser pro společnost s názvem Contoso).
    • Výběrem tlačítka Přidat spusťte nástroj scaffolder.

Generování uživatelského rozhraní Identity do aplikace na straně Blazor serveru s autorizací

Nainstalujte balíček NuGet Microsoft.VisualStudio.Web.CodeGeneration.Design.

Poznámka:

Pokyny k přidávání balíčků do aplikací .NET najdete v článcích v části Instalace a správa balíčků na webu Pracovní postup používání balíčků (dokumentace k NuGetu). Ověřte správné verze balíčků na NuGet.org.


Identity Spusťte scaffolder:

  • V Průzkumník řešení klikněte pravým tlačítkem myši na projekt> Přidat>novou vygenerovanou položku.
  • V levém podokně dialogového okna Přidat novou vygenerovanou položku vyberte Identity. Vyberte Identity v prostředním podokně. Vyberte tlačítko Přidat.
  • V dialogovém okně Přidat Identity vyberte požadované možnosti.
    • Pokud máte existující přizpůsobenou stránku rozložení (Identity_Layout.cshtml), vyberte existující stránku rozložení, abyste se vyhnuli přepsání rozložení nesprávným kódem od správce. Vyberte například jednu z těchto akcí:
      • Pages/Shared/_Layout.cshtml pro Razor stránky nebo Blazor Server projekty s existující Razor infrastrukturou Pages.
      • Views/Shared/_Layout.cshtml pro projekty nebo Blazor Server projekty MVC se stávající infrastrukturou MVC.
    • Pro kontext dat (DbContext – třída):
      • Vyberte třídu kontextu dat. Abyste mohli přidat kontext dat, musíte vybrat alespoň jeden soubor.
      • Pokud chcete vytvořit kontext dat a případně vytvořit novou třídu Identityuživatele, vyberte + tlačítko. Přijměte výchozí hodnotu nebo zadejte třídu (například Contoso.Data.ApplicationDbContext pro společnost s názvem Contoso). Pokud chcete vytvořit novou třídu uživatele, vyberte + tlačítko pro třídu User a zadejte třídu (například ContosoUser pro společnost s názvem Contoso).
    • Výběrem tlačítka Přidat spusťte nástroj scaffolder.

Migrace

Vygenerovaný Identity databázový kód vyžaduje migrace Entity Framework Core. Pokud migrace pro vytvoření schématu Identity nebyla vytvořena a použita pro databázi, vytvořte migraci a aktualizujte databázi. Spusťte například následující příkazy:

V konzole sady Visual Studio Správce balíčků:

Install-Package Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore
Add-Migration CreateIdentitySchema
Update-Database

Parametr názvu "CreateIdentitySchema" pro Add-Migration příkaz je libovolný. "CreateIdentitySchema" popisuje migraci.

Identity Pokud schéma již bylo vytvořeno, ale není použito v databázi, je nutné spustit pouze příkaz k aktualizaci databáze:

V konzole Správce balíčků sady Visual Studio spusťteUpdate-Database:

Update-Database

Aplikaci schématu Identity můžete potvrdit pomocí následujícího příkazu. Výstup příkazu obsahuje sloupec "applied", který ukazuje, které migrace se použijí v databázi.

V konzole Správce balíčků sady Visual Studio spusťteGet-Migration:

Get-Migration

Pokud existuje více kontextů databáze, zadejte kontext pomocí parametru -Context .

Koncové body ověřování stylu

Vzhledem k tomu, že aplikace na straně Blazor serveru používají Razor stránky Stránky Identity , změní se styl uživatelského rozhraní, když návštěvník přechází mezi Identity stránkami a komponentami. Máte dvě možnosti, jak řešit incongruous styly:

Vlastní Identity komponenty

ASP.NET Core Identity je navržená tak, aby fungovala v kontextu komunikace požadavků HTTP a odpovědí, což není primární komunikační model klient-server v Blazor aplikacích. Aplikace ASP.NET Core, které pro správu uživatelů využívají ASP.NET Core Identity, by měly pro uživatelské rozhraní související s Identity, jako je registrace uživatele, přihlášení, odhlášení a další úlohy správy uživatelů, místo komponent Razor využívat Razor Pages.

Vzhledem k tomu SignInManager<TUser> , že komponenty a UserManager<TUser> nejsou podporované Razor , doporučujeme ke správě Identity akcí ze Razor součástí použít webové rozhraní API ASP.NET IdentityCore. Pokyny k vytváření webových rozhraní API pro Blazor aplikace najdete v tématu Volání webového rozhraní API z aplikace ASP.NET CoreBlazor.

Přístup k používání Razor komponent místo IdentityRazor stránek spočívá v vytváření vlastních IdentityRazor komponent, ale Microsoft tento přístup nedoporučuje ani nepodporuje. Další kontext najdete v následujících diskuzích. V následujících diskuzích microsoft microsoft nepodporuje příklady kódu v komentářích k problému a příklady kódu křížově propojené v úložištích mimo Microsoft GitHub, ale můžou být užitečné pro některé vývojáře:

Pokud potřebujete další pomoc při hledání vlastních IdentityRazor komponent nebo hledání komponent třetích stran Razor , doporučujeme následující zdroje informací:

Použití vlastního rozložení se Blazor styly aplikací

Rozložení Identity a styly stránek lze upravit tak, aby vytvářely stránky, které používají styly podobné výchozímu Blazor motivu. Tento přístup se nevztahuje na dokumentaci.

Blazor Klientské aplikace

Blazor Klientské aplikace používají vlastní Identity přístupy k uživatelskému rozhraní a nemůžou používat generování uživatelského rozhraní ASP.NET CoreIdentity. Serverové ASP.NET základní aplikace hostovaných Blazor řešení můžou postupovat podle Razor pokynů pages/MVC v tomto článku a jsou nakonfigurované stejně jako jakýkoli jiný typ aplikace ASP.NET Core, která podporuje Identity.

Architektura Blazor nezahrnuje Razor verze Identity součástí stránek uživatelského rozhraní. Identity Komponenty uživatelského rozhraní Razor můžou být vytvořené nebo získané z nepodporovaných zdrojů třetích stran.

Další informace najdete v tématech Blazor Zabezpečení a Identity články.

Vytvoření úplného Identity zdroje uživatelského rozhraní

Pokud chcete zachovat úplnou kontrolu nad uživatelským Identity rozhraním, spusťte Identity správce uživatelského rozhraní a vyberte Přepsat všechny soubory.

Konfigurace hesla

Pokud PasswordOptions jsou nakonfigurovány v Startup.ConfigureServices, [StringLength] konfigurace atributu může být vyžadována Password pro vlastnost na vygenerovaných Identity stránkách. InputModelPassword vlastnosti jsou nalezeny v následujících souborech:

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

Zakázání stránky

V této části se dozvíte, jak zakázat stránku pro registraci, ale můžete ji použít k zakázání libovolné stránky.

Zakázání registrace uživatele:

  • Lešení Identity. Zahrnout Account.Register, Account.Login a Account.RegisterConfirmation. Příklad:

    dotnet aspnet-codegenerator identity -dc RPauth.Data.ApplicationDbContext --files "Account.Register;Account.Login;Account.RegisterConfirmation"
    
  • Aktualizujte Areas/Identity/Pages/Account/Register.cshtml.cs , aby se uživatelé nemohli zaregistrovat z tohoto koncového bodu:

    public class RegisterModel : PageModel
    {
        public IActionResult OnGet()
        {
            return RedirectToPage("Login");
        }
    
        public IActionResult OnPost()
        {
            return RedirectToPage("Login");
        }
    }
    
  • Aktualizujte Areas/Identity/Pages/Account/Register.cshtml , aby byly konzistentní s předchozími změnami:

    @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>
    
  • Zakomentujte nebo odeberte registrační odkaz z Areas/Identity/Pages/Account/Login.cshtml

    @*
    <p>
        <a asp-page="./Register" asp-route-returnUrl="@Model.ReturnUrl">Register as a new user</a>
    </p>
    *@
    
  • Aktualizujte stránku Areas//IdentityPages/Account/RegisterConfirmation.

    • Odeberte kód a odkazy ze souboru cshtml.
    • Odeberte potvrzovací kód z PageModel:
    [AllowAnonymous]
      public class RegisterConfirmationModel : PageModel
      {
          public IActionResult OnGet()
          {  
              return Page();
          }
      }
    

Přidání uživatelů pomocí jiné aplikace

Zadejte mechanismus pro přidání uživatelů mimo webovou aplikaci. Mezi možnosti přidání uživatelů patří:

  • Vyhrazená webová aplikace pro správu
  • Konzolová aplikace.

Následující kód popisuje jeden přístup k přidávání uživatelů:

  • Seznam uživatelů se čte do paměti.
  • Pro každého uživatele se vygeneruje silné jedinečné heslo.
  • Uživatel se přidá do Identity databáze.
  • Uživateli se zobrazí oznámení a bude mu řečeno, aby změnil heslo.
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>();
            });
}

Následující kód popisuje přidání uživatele:


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;
}

Podobný přístup je možné sledovat v produkčních scénářích.

Zabránění publikování statických Identity prostředků

Pokud chcete zabránit publikování statických Identity prostředků do kořenového adresáře webu, přečtěte si téma Úvod do Identity ASP.NET Core.

ASP.NET Core poskytuje ASP.NET Core Identity jako knihovnu Razortříd. Aplikace, které zahrnují Identity , mohou použít scaffolder k selektivnímu přidání zdrojového kódu obsaženého v knihovně IdentityRazor tříd (RCL). Můžete chtít vygenerovat zdrojový kód, abyste mohli kód upravit a změnit chování. Můžete například dát scaffolder pokyn, aby vygeneroval kód použitý v registraci. Vygenerovaný kód má přednost před stejným kódem v seznamu Identity RCL. Pokud chcete získat úplnou kontrolu nad uživatelským rozhraním a nepoužívat výchozí seznam RCL, přečtěte si část Vytvoření úplného Identity zdroje uživatelského rozhraní.

Aplikace, které nezahrnují ověřování, mohou použít scaffolder pro přidání balíčku RCLIdentity. Máte možnost vybrat Identity kód, který se má vygenerovat.

I když scaffolder generuje většinu potřebného kódu, musíte aktualizovat projekt, aby se proces dokončil. Tento dokument vysvětluje kroky potřebné k dokončení Identity aktualizace generování uživatelského rozhraní.

Doporučujeme použít systém správy zdrojového kódu, který zobrazuje rozdíly mezi soubory a umožňuje vrátit se zpět ze změn. Zkontrolujte změny po spuštění Identity nástroje scaffolder.

Služby se vyžadují při použití dvoufaktorového ověřování, potvrzení účtu a obnovení hesla a dalších funkcí zabezpečení s Identity. Služby nebo zástupné procedury služeb se při generování nevygenerují Identity. Služby, které mají tyto funkce povolit, musí být přidány ručně. Příklad najdete v tématu Vyžadovat potvrzení e-mailu.

Při generování uživatelského rozhraní Identity s novým kontextem dat do projektu s existujícími jednotlivými účty:

  • V Startup.ConfigureServicesokně odeberte volání na:
    • AddDbContext
    • AddDefaultIdentity

Například AddDbContext a AddDefaultIdentity jsou okomentovány v následujícím kódu:

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();
}

Předchozí kód okomentuje kód, který je duplikován v Areas/Identity/IdentityHostingStartup.cs

Aplikace vytvořené pomocí jednotlivých účtů by obvykle neměly vytvářet nový kontext dat.

Generování uživatelského rozhraní Identity do prázdného projektu

Identity Spusťte scaffolder:

  • V Průzkumník řešení klikněte pravým tlačítkem myši na projekt> Přidat>novou vygenerovanou položku.
  • V levém podokně dialogového okna Přidat novou vygenerovanou položku vyberte Identity. Vyberte Identity v prostředním podokně. Vyberte tlačítko Přidat.
  • V dialogovém okně Přidat Identity vyberte požadované možnosti.
    • Pokud máte existující přizpůsobenou stránku rozložení (Identity_Layout.cshtml), vyberte existující stránku rozložení, abyste se vyhnuli přepsání rozložení nesprávným kódem od správce. Vyberte například jednu z těchto akcí:
      • Pages/Shared/_Layout.cshtml pro Razor stránky nebo Blazor Server projekty s existující Razor infrastrukturou Pages.
      • Views/Shared/_Layout.cshtml pro projekty nebo Blazor Server projekty MVC se stávající infrastrukturou MVC.
    • Pro kontext dat (DbContext – třída):
      • Vyberte třídu kontextu dat. Abyste mohli přidat kontext dat, musíte vybrat alespoň jeden soubor.
      • Pokud chcete vytvořit kontext dat a případně vytvořit novou třídu Identityuživatele, vyberte + tlačítko. Přijměte výchozí hodnotu nebo zadejte třídu (například Contoso.Data.ApplicationDbContext pro společnost s názvem Contoso). Pokud chcete vytvořit novou třídu uživatele, vyberte + tlačítko pro třídu User a zadejte třídu (například ContosoUser pro společnost s názvem Contoso).
    • Výběrem tlačítka Přidat spusťte nástroj scaffolder.

Startup Aktualizujte třídu kódem podobným následujícímu:

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 se doporučuje, ale nevyžaduje se. Další informace naleznete v tématu HTTP Strict Transport Security Protocol.

Vygenerovaný Identity databázový kód vyžaduje migrace Entity Framework Core. Pokud migrace pro vytvoření schématu Identity nebyla vytvořena a použita pro databázi, vytvořte migraci a aktualizujte databázi. Spusťte například následující příkazy:

V konzole sady Visual Studio Správce balíčků:

Install-Package Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore
Add-Migration CreateIdentitySchema
Update-Database

Parametr názvu "CreateIdentitySchema" pro Add-Migration příkaz je libovolný. "CreateIdentitySchema" popisuje migraci.

Identity Pokud schéma již bylo vytvořeno, ale není použito v databázi, je nutné spustit pouze příkaz k aktualizaci databáze:

V konzole Správce balíčků sady Visual Studio spusťteUpdate-Database:

Update-Database

Aplikaci schématu Identity můžete potvrdit pomocí následujícího příkazu. Výstup příkazu obsahuje sloupec "applied", který ukazuje, které migrace se použijí v databázi.

V konzole Správce balíčků sady Visual Studio spusťteGet-Migration:

Get-Migration

Pokud existuje více kontextů databáze, zadejte kontext pomocí parametru -Context .

Generování uživatelského rozhraní Identity do Razor projektu bez existující autorizace

Identity Spusťte scaffolder:

  • V Průzkumník řešení klikněte pravým tlačítkem myši na projekt> Přidat>novou vygenerovanou položku.
  • V levém podokně dialogového okna Přidat novou vygenerovanou položku vyberte Identity. Vyberte Identity v prostředním podokně. Vyberte tlačítko Přidat.
  • V dialogovém okně Přidat Identity vyberte požadované možnosti.
    • Pokud máte existující přizpůsobenou stránku rozložení (Identity_Layout.cshtml), vyberte existující stránku rozložení, abyste se vyhnuli přepsání rozložení nesprávným kódem od správce. Vyberte například jednu z těchto akcí:
      • Pages/Shared/_Layout.cshtml pro Razor stránky nebo Blazor Server projekty s existující Razor infrastrukturou Pages.
      • Views/Shared/_Layout.cshtml pro projekty nebo Blazor Server projekty MVC se stávající infrastrukturou MVC.
    • Pro kontext dat (DbContext – třída):
      • Vyberte třídu kontextu dat. Abyste mohli přidat kontext dat, musíte vybrat alespoň jeden soubor.
      • Pokud chcete vytvořit kontext dat a případně vytvořit novou třídu Identityuživatele, vyberte + tlačítko. Přijměte výchozí hodnotu nebo zadejte třídu (například Contoso.Data.ApplicationDbContext pro společnost s názvem Contoso). Pokud chcete vytvořit novou třídu uživatele, vyberte + tlačítko pro třídu User a zadejte třídu (například ContosoUser pro společnost s názvem Contoso).
    • Výběrem tlačítka Přidat spusťte nástroj scaffolder.

Identity je nakonfigurován v Areas/Identity/IdentityHostingStartup.cssouboru . Další informace naleznete v tématu IHostingStartup.

Migrace, useAuthentication a rozložení

Vygenerovaný Identity databázový kód vyžaduje migrace Entity Framework Core. Pokud migrace pro vytvoření schématu Identity nebyla vytvořena a použita pro databázi, vytvořte migraci a aktualizujte databázi. Spusťte například následující příkazy:

V konzole sady Visual Studio Správce balíčků:

Install-Package Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore
Add-Migration CreateIdentitySchema
Update-Database

Parametr názvu "CreateIdentitySchema" pro Add-Migration příkaz je libovolný. "CreateIdentitySchema" popisuje migraci.

Identity Pokud schéma již bylo vytvořeno, ale není použito v databázi, je nutné spustit pouze příkaz k aktualizaci databáze:

V konzole Správce balíčků sady Visual Studio spusťteUpdate-Database:

Update-Database

Aplikaci schématu Identity můžete potvrdit pomocí následujícího příkazu. Výstup příkazu obsahuje sloupec "applied", který ukazuje, které migrace se použijí v databázi.

V konzole Správce balíčků sady Visual Studio spusťteGet-Migration:

Get-Migration

Pokud existuje více kontextů databáze, zadejte kontext pomocí parametru -Context .

Povolit ověřování

Startup Aktualizujte třídu kódem podobným následujícímu:

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 se doporučuje, ale nevyžaduje se. Další informace naleznete v tématu HTTP Strict Transport Security Protocol.

Změny rozložení

Volitelné: Přidání částečného přihlášení (_LoginPartial) do souboru rozložení:

<!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>

Generování uživatelského rozhraní Identity do Razor projektu s autorizací

Identity Spusťte scaffolder:

  • V Průzkumník řešení klikněte pravým tlačítkem myši na projekt> Přidat>novou vygenerovanou položku.
  • V levém podokně dialogového okna Přidat novou vygenerovanou položku vyberte Identity. Vyberte Identity v prostředním podokně. Vyberte tlačítko Přidat.
  • V dialogovém okně Přidat Identity vyberte požadované možnosti.
    • Pokud máte existující přizpůsobenou stránku rozložení (Identity_Layout.cshtml), vyberte existující stránku rozložení, abyste se vyhnuli přepsání rozložení nesprávným kódem od správce. Vyberte například jednu z těchto akcí:
      • Pages/Shared/_Layout.cshtml pro Razor stránky nebo Blazor Server projekty s existující Razor infrastrukturou Pages.
      • Views/Shared/_Layout.cshtml pro projekty nebo Blazor Server projekty MVC se stávající infrastrukturou MVC.
    • Pro kontext dat (DbContext – třída):
      • Vyberte třídu kontextu dat. Abyste mohli přidat kontext dat, musíte vybrat alespoň jeden soubor.
      • Pokud chcete vytvořit kontext dat a případně vytvořit novou třídu Identityuživatele, vyberte + tlačítko. Přijměte výchozí hodnotu nebo zadejte třídu (například Contoso.Data.ApplicationDbContext pro společnost s názvem Contoso). Pokud chcete vytvořit novou třídu uživatele, vyberte + tlačítko pro třídu User a zadejte třídu (například ContosoUser pro společnost s názvem Contoso).
    • Výběrem tlačítka Přidat spusťte nástroj scaffolder.

Některé Identity možnosti jsou nakonfigurované v Areas/Identity/IdentityHostingStartup.cssouboru . Další informace naleznete v tématu IHostingStartup.

Generování uživatelského rozhraní Identity do projektu MVC bez existující autorizace

Identity Spusťte scaffolder:

  • V Průzkumník řešení klikněte pravým tlačítkem myši na projekt> Přidat>novou vygenerovanou položku.
  • V levém podokně dialogového okna Přidat novou vygenerovanou položku vyberte Identity. Vyberte Identity v prostředním podokně. Vyberte tlačítko Přidat.
  • V dialogovém okně Přidat Identity vyberte požadované možnosti.
    • Pokud máte existující přizpůsobenou stránku rozložení (Identity_Layout.cshtml), vyberte existující stránku rozložení, abyste se vyhnuli přepsání rozložení nesprávným kódem od správce. Vyberte například jednu z těchto akcí:
      • Pages/Shared/_Layout.cshtml pro Razor stránky nebo Blazor Server projekty s existující Razor infrastrukturou Pages.
      • Views/Shared/_Layout.cshtml pro projekty nebo Blazor Server projekty MVC se stávající infrastrukturou MVC.
    • Pro kontext dat (DbContext – třída):
      • Vyberte třídu kontextu dat. Abyste mohli přidat kontext dat, musíte vybrat alespoň jeden soubor.
      • Pokud chcete vytvořit kontext dat a případně vytvořit novou třídu Identityuživatele, vyberte + tlačítko. Přijměte výchozí hodnotu nebo zadejte třídu (například Contoso.Data.ApplicationDbContext pro společnost s názvem Contoso). Pokud chcete vytvořit novou třídu uživatele, vyberte + tlačítko pro třídu User a zadejte třídu (například ContosoUser pro společnost s názvem Contoso).
    • Výběrem tlačítka Přidat spusťte nástroj scaffolder.

Volitelné: Přidejte do souboru částečnou (_LoginPartial) Views/Shared/_Layout.cshtml přihlášení:

<!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>
  • Pages/Shared/_LoginPartial.cshtml Přesunutí souboru doViews/Shared/_LoginPartial.cshtml

Identity je nakonfigurován v Areas/Identity/IdentityHostingStartup.cssouboru . Další informace naleznete v tématu IHostingStartup.

Vygenerovaný Identity databázový kód vyžaduje migrace Entity Framework Core. Pokud migrace pro vytvoření schématu Identity nebyla vytvořena a použita pro databázi, vytvořte migraci a aktualizujte databázi. Spusťte například následující příkazy:

V konzole sady Visual Studio Správce balíčků:

Install-Package Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore
Add-Migration CreateIdentitySchema
Update-Database

Parametr názvu "CreateIdentitySchema" pro Add-Migration příkaz je libovolný. "CreateIdentitySchema" popisuje migraci.

Identity Pokud schéma již bylo vytvořeno, ale není použito v databázi, je nutné spustit pouze příkaz k aktualizaci databáze:

V konzole Správce balíčků sady Visual Studio spusťteUpdate-Database:

Update-Database

Aplikaci schématu Identity můžete potvrdit pomocí následujícího příkazu. Výstup příkazu obsahuje sloupec "applied", který ukazuje, které migrace se použijí v databázi.

V konzole Správce balíčků sady Visual Studio spusťteGet-Migration:

Get-Migration

Pokud existuje více kontextů databáze, zadejte kontext pomocí parametru -Context .

Startup Aktualizujte třídu kódem podobným následujícímu:

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 se doporučuje, ale nevyžaduje se. Další informace naleznete v tématu HTTP Strict Transport Security Protocol.

Generování uživatelského rozhraní Identity do projektu MVC s autorizací

Identity Spusťte scaffolder:

  • V Průzkumník řešení klikněte pravým tlačítkem myši na projekt> Přidat>novou vygenerovanou položku.
  • V levém podokně dialogového okna Přidat novou vygenerovanou položku vyberte Identity. Vyberte Identity v prostředním podokně. Vyberte tlačítko Přidat.
  • V dialogovém okně Přidat Identity vyberte požadované možnosti.
    • Pokud máte existující přizpůsobenou stránku rozložení (Identity_Layout.cshtml), vyberte existující stránku rozložení, abyste se vyhnuli přepsání rozložení nesprávným kódem od správce. Vyberte například jednu z těchto akcí:
      • Pages/Shared/_Layout.cshtml pro Razor stránky nebo Blazor Server projekty s existující Razor infrastrukturou Pages.
      • Views/Shared/_Layout.cshtml pro projekty nebo Blazor Server projekty MVC se stávající infrastrukturou MVC.
    • Pro kontext dat (DbContext – třída):
      • Vyberte třídu kontextu dat. Abyste mohli přidat kontext dat, musíte vybrat alespoň jeden soubor.
      • Pokud chcete vytvořit kontext dat a případně vytvořit novou třídu Identityuživatele, vyberte + tlačítko. Přijměte výchozí hodnotu nebo zadejte třídu (například Contoso.Data.ApplicationDbContext pro společnost s názvem Contoso). Pokud chcete vytvořit novou třídu uživatele, vyberte + tlačítko pro třídu User a zadejte třídu (například ContosoUser pro společnost s názvem Contoso).
    • Výběrem tlačítka Přidat spusťte nástroj scaffolder.

Generování uživatelského rozhraní Identity do aplikace na straně Blazor serveru bez existující autorizace

Identity Spusťte scaffolder:

  • V Průzkumník řešení klikněte pravým tlačítkem myši na projekt> Přidat>novou vygenerovanou položku.
  • V levém podokně dialogového okna Přidat novou vygenerovanou položku vyberte Identity. Vyberte Identity v prostředním podokně. Vyberte tlačítko Přidat.
  • V dialogovém okně Přidat Identity vyberte požadované možnosti.
    • Pokud máte existující přizpůsobenou stránku rozložení (Identity_Layout.cshtml), vyberte existující stránku rozložení, abyste se vyhnuli přepsání rozložení nesprávným kódem od správce. Vyberte například jednu z těchto akcí:
      • Pages/Shared/_Layout.cshtml pro Razor stránky nebo Blazor Server projekty s existující Razor infrastrukturou Pages.
      • Views/Shared/_Layout.cshtml pro projekty nebo Blazor Server projekty MVC se stávající infrastrukturou MVC.
    • Pro kontext dat (DbContext – třída):
      • Vyberte třídu kontextu dat. Abyste mohli přidat kontext dat, musíte vybrat alespoň jeden soubor.
      • Pokud chcete vytvořit kontext dat a případně vytvořit novou třídu Identityuživatele, vyberte + tlačítko. Přijměte výchozí hodnotu nebo zadejte třídu (například Contoso.Data.ApplicationDbContext pro společnost s názvem Contoso). Pokud chcete vytvořit novou třídu uživatele, vyberte + tlačítko pro třídu User a zadejte třídu (například ContosoUser pro společnost s názvem Contoso).
    • Výběrem tlačítka Přidat spusťte nástroj scaffolder.

Identity je nakonfigurován v Areas/Identity/IdentityHostingStartup.cssouboru . Další informace najdete na webu IHostingStartup.

Migrace

Vygenerovaný Identity databázový kód vyžaduje migrace Entity Framework Core. Pokud migrace pro vytvoření schématu Identity nebyla vytvořena a použita pro databázi, vytvořte migraci a aktualizujte databázi. Spusťte například následující příkazy:

V konzole sady Visual Studio Správce balíčků:

Install-Package Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore
Add-Migration CreateIdentitySchema
Update-Database

Parametr názvu "CreateIdentitySchema" pro Add-Migration příkaz je libovolný. "CreateIdentitySchema" popisuje migraci.

Identity Pokud schéma již bylo vytvořeno, ale není použito v databázi, je nutné spustit pouze příkaz k aktualizaci databáze:

V konzole Správce balíčků sady Visual Studio spusťteUpdate-Database:

Update-Database

Aplikaci schématu Identity můžete potvrdit pomocí následujícího příkazu. Výstup příkazu obsahuje sloupec "applied", který ukazuje, které migrace se použijí v databázi.

V konzole Správce balíčků sady Visual Studio spusťteGet-Migration:

Get-Migration

Pokud existuje více kontextů databáze, zadejte kontext pomocí parametru -Context .

Koncové body ověřování stylu

Vzhledem k tomu, že aplikace na straně Blazor serveru používají Razor stránky Stránky Identity , změní se styl uživatelského rozhraní, když návštěvník přechází mezi Identity stránkami a komponentami. Máte dvě možnosti, jak řešit incongruous styly:

Vlastní Identity komponenty

Přístup k používání komponent místo Identity stránek spočívá v vytváření Identity komponent. Vzhledem k tomu SignInManager , že součásti UserManager nejsou podporované Razor , použijte koncové body webového Blazor rozhraní API v aplikaci ke zpracování akcí uživatelského účtu.

Použití vlastního rozložení se Blazor styly aplikací

Rozložení Identity a styly stránek lze upravit tak, aby vytvářely stránky, které používají styly podobné výchozímu Blazor motivu. Tento přístup se nevztahuje na dokumentaci.

Generování uživatelského rozhraní Identity do aplikace na straně Blazor serveru s autorizací

Identity Spusťte scaffolder:

  • V Průzkumník řešení klikněte pravým tlačítkem myši na projekt> Přidat>novou vygenerovanou položku.
  • V levém podokně dialogového okna Přidat novou vygenerovanou položku vyberte Identity. Vyberte Identity v prostředním podokně. Vyberte tlačítko Přidat.
  • V dialogovém okně Přidat Identity vyberte požadované možnosti.
    • Pokud máte existující přizpůsobenou stránku rozložení (Identity_Layout.cshtml), vyberte existující stránku rozložení, abyste se vyhnuli přepsání rozložení nesprávným kódem od správce. Vyberte například jednu z těchto akcí:
      • Pages/Shared/_Layout.cshtml pro Razor stránky nebo Blazor Server projekty s existující Razor infrastrukturou Pages.
      • Views/Shared/_Layout.cshtml pro projekty nebo Blazor Server projekty MVC se stávající infrastrukturou MVC.
    • Pro kontext dat (DbContext – třída):
      • Vyberte třídu kontextu dat. Abyste mohli přidat kontext dat, musíte vybrat alespoň jeden soubor.
      • Pokud chcete vytvořit kontext dat a případně vytvořit novou třídu Identityuživatele, vyberte + tlačítko. Přijměte výchozí hodnotu nebo zadejte třídu (například Contoso.Data.ApplicationDbContext pro společnost s názvem Contoso). Pokud chcete vytvořit novou třídu uživatele, vyberte + tlačítko pro třídu User a zadejte třídu (například ContosoUser pro společnost s názvem Contoso).
    • Výběrem tlačítka Přidat spusťte nástroj scaffolder.

Některé Identity možnosti jsou nakonfigurované v Areas/Identity/IdentityHostingStartup.cssouboru . Další informace naleznete v tématu IHostingStartup.

Blazor Klientské aplikace

Blazor Klientské aplikace používají vlastní Identity přístupy k uživatelskému rozhraní a nemůžou používat generování uživatelského rozhraní ASP.NET CoreIdentity. Serverové ASP.NET základní aplikace hostovaných Blazor řešení můžou postupovat podle Razor pokynů pages/MVC v tomto článku a jsou nakonfigurované stejně jako jakýkoli jiný typ aplikace ASP.NET Core, která podporuje Identity.

Architektura Blazor nezahrnuje Razor verze Identity součástí stránek uživatelského rozhraní. Identity Komponenty uživatelského rozhraní Razor můžou být vytvořené nebo získané z nepodporovaných zdrojů třetích stran.

Další informace najdete v tématech Blazor Zabezpečení a Identity články.

Vytvoření úplného Identity zdroje uživatelského rozhraní

Pokud chcete zachovat úplnou kontrolu nad uživatelským Identity rozhraním, spusťte Identity správce uživatelského rozhraní a vyberte Přepsat všechny soubory.

Následující zvýrazněný kód ukazuje změny, které nahradí výchozí Identity uživatelské rozhraní Identity ve webové aplikaci ASP.NET Core 2.1. Můžete to udělat, abyste měli plnou kontrolu nad uživatelským rozhraním Identity .

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>();
}

Výchozí hodnota Identity se nahradí v následujícím kódu:

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

Následující kód nastaví LoginPathznak , LogoutPatha AccessDeniedPath):

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

Zaregistrujte implementaci IEmailSender , například:

// 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;
    }
}

Konfigurace hesla

Pokud PasswordOptions jsou nakonfigurovány v Startup.ConfigureServices, [StringLength] konfigurace atributu může být vyžadována Password pro vlastnost na vygenerovaných Identity stránkách. InputModelPassword vlastnosti jsou nalezeny v následujících souborech:

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

Zakázání stránky

V této části se dozvíte, jak zakázat stránku pro registraci, ale můžete ji použít k zakázání libovolné stránky.

Zakázání registrace uživatele:

  • Lešení Identity. Zahrnout Account.Register, Account.Login a Account.RegisterConfirmation. Příklad:

    dotnet aspnet-codegenerator identity -dc RPauth.Data.ApplicationDbContext --files "Account.Register;Account.Login;Account.RegisterConfirmation"
    
  • Aktualizujte Areas/Identity/Pages/Account/Register.cshtml.cs , aby se uživatelé nemohli zaregistrovat z tohoto koncového bodu:

    public class RegisterModel : PageModel
    {
        public IActionResult OnGet()
        {
            return RedirectToPage("Login");
        }
    
        public IActionResult OnPost()
        {
            return RedirectToPage("Login");
        }
    }
    
  • Aktualizujte Areas/Identity/Pages/Account/Register.cshtml , aby byly konzistentní s předchozími změnami:

    @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>
    
  • Zakomentujte nebo odeberte registrační odkaz z Areas/Identity/Pages/Account/Login.cshtml

    @*
    <p>
        <a asp-page="./Register" asp-route-returnUrl="@Model.ReturnUrl">Register as a new user</a>
    </p>
    *@
    
  • Aktualizujte stránku Areas//IdentityPages/Account/RegisterConfirmation.

    • Odeberte kód a odkazy ze souboru cshtml.
    • Odeberte potvrzovací kód z PageModel:
    [AllowAnonymous]
      public class RegisterConfirmationModel : PageModel
      {
          public IActionResult OnGet()
          {  
              return Page();
          }
      }
    

Přidání uživatelů pomocí jiné aplikace

Zadejte mechanismus pro přidání uživatelů mimo webovou aplikaci. Mezi možnosti přidání uživatelů patří:

  • Vyhrazená webová aplikace pro správu
  • Konzolová aplikace.

Následující kód popisuje jeden přístup k přidávání uživatelů:

  • Seznam uživatelů se čte do paměti.
  • Pro každého uživatele se vygeneruje silné jedinečné heslo.
  • Uživatel se přidá do Identity databáze.
  • Uživateli se zobrazí oznámení a bude mu řečeno, aby změnil heslo.
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>();
            });
}

Následující kód popisuje přidání uživatele:


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;
}

Podobný přístup je možné sledovat v produkčních scénářích.

Zabránění publikování statických Identity prostředků

Pokud chcete zabránit publikování statických Identity prostředků do kořenového adresáře webu, přečtěte si téma Úvod do Identity ASP.NET Core.

Další materiály