Identidade de Scaffold em projetos ASP.NET CoreScaffold Identity in ASP.NET Core projects

Por Rick AndersonBy Rick Anderson

O ASP.NET Core 2.1 e posterior fornece ASP.NET Core Identity como um biblioteca de classes Razor.ASP.NET Core 2.1 and later provides ASP.NET Core Identity as a Razor Class Library. Aplicativos que incluem a identidade podem aplicar o scaffolder para seletivamente, adicione o código-fonte contido na identidade Razor classe RCL (biblioteca).Applications that include Identity can apply the scaffolder to selectively add the source code contained in the Identity Razor Class Library (RCL). Talvez você queira gerar o código-fonte para que você possa modificar o código e alterar o comportamento.You might want to generate source code so you can modify the code and change the behavior. Por exemplo, você pode instruir o scaffolder a gerar o código usado no registro.For example, you could instruct the scaffolder to generate the code used in registration. Código gerado tem precedência sobre o mesmo código na RCL de Identidade.Generated code takes precedence over the same code in the Identity RCL. Para obter controle total da interface do usuário e usar a RCL padrão, consulte a seção criar fonte de interface do usuário de identidade completa.To gain full control of the UI and not use the default RCL, see the section Create full identity UI source.

Aplicativos que fazem não incluem autenticação pode aplicar o scaffolder para adicionar o pacote de identidade da RCL.Applications that do not include authentication can apply the scaffolder to add the RCL Identity package. Você tem a opção de selecionar o código de Identidade a ser gerado.You have the option of selecting Identity code to be generated.

Embora o scaffolder gera a maioria do código necessário, você precisará atualizar seu projeto para concluir o processo.Although the scaffolder generates most of the necessary code, you'll have to update your project to complete the process. Este documento explica as etapas necessárias para concluir uma atualização de scaffolding de identidade.This document explains the steps needed to complete an Identity scaffolding update.

Quando o scaffolder de identidade é executado, uma Scaffoldingreadme arquivo é criado no diretório do projeto.When the Identity scaffolder is run, a ScaffoldingReadme.txt file is created in the project directory. O Scaffoldingreadme arquivo contém instruções gerais sobre o que é necessário para concluir a atualização de scaffolding de identidade.The ScaffoldingReadme.txt file contains general instructions on what's needed to complete the Identity scaffolding update. Este documento contém instruções mais completas que o Scaffoldingreadme arquivo.This document contains more complete instructions than the ScaffoldingReadme.txt file.

É recomendável usar um sistema de controle do código-fonte que mostra as diferenças de arquivo e permite que você faça alterações fora.We recommend using a source control system that shows file differences and allows you to back out of changes. Inspecione as alterações depois de executar o scaffolder de identidade.Inspect the changes after running the Identity scaffolder.

Observação

Os serviços são necessários ao usar autenticação de dois fatores, recuperação de confirmação e a senha da contae outros recursos de segurança com identidade.Services are required when using Two Factor Authentication, Account confirmation and password recovery, and other security features with Identity. Serviços ou stubs de serviço não são gerados quando o scaffolding de identidade.Services or service stubs aren't generated when scaffolding Identity. Serviços para habilitar esses recursos devem ser adicionados manualmente.Services to enable these features must be added manually. Por exemplo, consulte exigem Email de confirmação.For example, see Require Email Confirmation.

Identidade de Scaffold em um projeto vazioScaffold identity into an empty project

Execute o scaffolder de identidade:Run the Identity scaffolder:

  • Partir Gerenciador de soluções, clique com botão direito no projeto > Add > New Scaffolded Item.From Solution Explorer, right-click on the project > Add > New Scaffolded Item.
  • No painel à esquerda do adicionar Scaffold caixa de diálogo, selecione identidade > adicionar.From the left pane of the Add Scaffold dialog, select Identity > ADD.
  • No identidade de adição caixa de diálogo, selecione as opções desejadas.In the ADD Identity dialog, select the options you want.
    • Selecione a página de layout existente ou seu arquivo de layout será substituído pela marcação incorreta.Select your existing layout page, or your layout file will be overwritten with incorrect markup. Por exemplo ~/Pages/Shared/_Layout.cshtml para as páginas Razor ~/Views/Shared/_Layout.cshtml para projetos MVCFor example ~/Pages/Shared/_Layout.cshtml for Razor Pages ~/Views/Shared/_Layout.cshtml for MVC projects
    • Selecione o + botão para criar um novo classe de contexto de dados.Select the + button to create a new Data context class.
  • Selecione adicionar.Select ADD.

Adicione as seguintes chamadas destacadas para o Startup classe:Add the following highlighted calls to the Startup class:

public class Startup
{        
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseAuthentication();
        app.UseMvc();
    }
}

UseHsts é recomendável, mas não é necessário.UseHsts is recommended but not required. Ver protocolo de segurança de transporte estrito HTTP para obter mais informações.See HTTP Strict Transport Security Protocol for more information.

Exige que o código de banco de dados de identidade gerado migrações do Entity Framework Core.The generated Identity database code requires Entity Framework Core Migrations. Criar uma migração e atualizar o banco de dados.Create a migration and update the database. Por exemplo, execute os seguintes comandos:For example, run the following commands:

No Visual Studio Package Manager Console:In the Visual Studio Package Manager Console:

Add-Migration CreateIdentitySchema
Update-Database

O parâmetro de nome "CreateIdentitySchema" para o Add-Migration comando é arbitrário.The "CreateIdentitySchema" name parameter for the Add-Migration command is arbitrary. "CreateIdentitySchema" Descreve a migração."CreateIdentitySchema" describes the migration.

Identidade de Scaffold em um projeto do Razor sem autorização existenteScaffold identity into a Razor project without existing authorization

Execute o scaffolder de identidade:Run the Identity scaffolder:

  • Partir Gerenciador de soluções, clique com botão direito no projeto > Add > New Scaffolded Item.From Solution Explorer, right-click on the project > Add > New Scaffolded Item.
  • No painel à esquerda do adicionar Scaffold caixa de diálogo, selecione identidade > adicionar.From the left pane of the Add Scaffold dialog, select Identity > ADD.
  • No identidade de adição caixa de diálogo, selecione as opções desejadas.In the ADD Identity dialog, select the options you want.
    • Selecione a página de layout existente ou seu arquivo de layout será substituído pela marcação incorreta.Select your existing layout page, or your layout file will be overwritten with incorrect markup. Por exemplo ~/Pages/Shared/_Layout.cshtml para as páginas Razor ~/Views/Shared/_Layout.cshtml para projetos MVCFor example ~/Pages/Shared/_Layout.cshtml for Razor Pages ~/Views/Shared/_Layout.cshtml for MVC projects
    • Selecione o + botão para criar um novo classe de contexto de dados.Select the + button to create a new Data context class.
  • Selecione adicionar.Select ADD.

Identidade é configurada no Areas/Identity/IdentityHostingStartup.cs.Identity is configured in Areas/Identity/IdentityHostingStartup.cs. Para obter mais informações, consulte IHostingStartup.for more information, see IHostingStartup.

As migrações, UseAuthentication e layoutMigrations, UseAuthentication, and layout

Exige que o código de banco de dados de identidade gerado migrações do Entity Framework Core.The generated Identity database code requires Entity Framework Core Migrations. Criar uma migração e atualizar o banco de dados.Create a migration and update the database. Por exemplo, execute os seguintes comandos:For example, run the following commands:

No Visual Studio Package Manager Console:In the Visual Studio Package Manager Console:

Add-Migration CreateIdentitySchema
Update-Database

O parâmetro de nome "CreateIdentitySchema" para o Add-Migration comando é arbitrário.The "CreateIdentitySchema" name parameter for the Add-Migration command is arbitrary. "CreateIdentitySchema" Descreve a migração."CreateIdentitySchema" describes the migration.

Habilitar a autenticaçãoEnable authentication

No Configure método da Startup classe, chame UseAuthentication depois UseStaticFiles:In the Configure method of the Startup class, call UseAuthentication after UseStaticFiles:

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

    public IConfiguration Configuration { get; }

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

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

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

        app.UseMvc();
    }
}

UseHsts é recomendável, mas não é necessário.UseHsts is recommended but not required. Ver protocolo de segurança de transporte estrito HTTP para obter mais informações.See HTTP Strict Transport Security Protocol for more information.

Alterações de layoutLayout changes

Opcional: Adicione o logon parcial (_LoginPartial) para o arquivo de layout:Optional: Add the login partial (_LoginPartial) to the layout file:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>@ViewData["Title"] - RazorNoAuth8</title>

    <environment include="Development">
        <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
        <link rel="stylesheet" href="~/css/site.css" />
    </environment>
    <environment exclude="Development">
        <link rel="stylesheet" href="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.7/css/bootstrap.min.css"
              asp-fallback-href="~/lib/bootstrap/dist/css/bootstrap.min.css"
              asp-fallback-test-class="sr-only" asp-fallback-test-property="position" asp-fallback-test-value="absolute" />
        <link rel="stylesheet" href="~/css/site.min.css" asp-append-version="true" />
    </environment>
</head>
<body>
    <nav class="navbar navbar-inverse navbar-fixed-top">
        <div class="container">
            <div class="navbar-header">
                <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
                    <span class="sr-only">Toggle navigation</span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
                <a asp-page="/Index" class="navbar-brand">RazorNoAuth8</a>
            </div>
            <div class="navbar-collapse collapse">
                <ul class="nav navbar-nav">
                    <li><a asp-page="/Index">Home</a></li>
                    <li><a asp-page="/About">About</a></li>
                    <li><a asp-page="/Contact">Contact</a></li>
                </ul>
                <partial name="_LoginPartial" />
            </div>
        </div>
    </nav>

    <partial name="_CookieConsentPartial" />

    <div class="container body-content">
        @RenderBody()
        <hr />
        <footer>
            <p>&copy; 2018 - RazorNoAuth8</p>
        </footer>
    </div>

    <environment include="Development">
        <script src="~/lib/jquery/dist/jquery.js"></script>
        <script src="~/lib/bootstrap/dist/js/bootstrap.js"></script>
        <script src="~/js/site.js" asp-append-version="true"></script>
    </environment>
    <environment exclude="Development">
        <script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-3.3.1.min.js"
                asp-fallback-src="~/lib/jquery/dist/jquery.min.js"
                asp-fallback-test="window.jQuery"
                crossorigin="anonymous"
                integrity="sha384-K+ctZQ+LL8q6tP7I94W+qzQsfRV2a+AfHIi9k8z8l9ggpc8X+Ytst4yBo/hH+8Fk">
        </script>
        <script src="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.7/bootstrap.min.js"
                asp-fallback-src="~/lib/bootstrap/dist/js/bootstrap.min.js"
                asp-fallback-test="window.jQuery && window.jQuery.fn && window.jQuery.fn.modal"
                crossorigin="anonymous"
                integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa">
        </script>
        <script src="~/js/site.min.js" asp-append-version="true"></script>
    </environment>

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

Identidade de Scaffold em um projeto do Razor com autorizaçãoScaffold identity into a Razor project with authorization

Execute o scaffolder de identidade:Run the Identity scaffolder:

  • Partir Gerenciador de soluções, clique com botão direito no projeto > Add > New Scaffolded Item.From Solution Explorer, right-click on the project > Add > New Scaffolded Item.
  • No painel esquerdo da caixa de diálogo Adicionar Scaffold , selecione identidade > Adicionar.From the left pane of the Add Scaffold dialog, select Identity > Add.
  • Na caixa de diálogo Adicionar identidade , selecione as opções desejadas.In the Add Identity dialog, select the options you want.
    • Selecione a página de layout existente ou o arquivo de layout será substituído por marcação incorreta.Select your existing layout page, or your layout file will be overwritten with incorrect markup. Quando um arquivo _layout. cshtml existente é selecionado, ele não é substituído.When an existing _Layout.cshtml file is selected, it is not overwritten.

Por exemplo: ~/Pages/Shared/_Layout.cshtml para Razor Pages ~/Views/Shared/_Layout.cshtml para projetos MVCFor example: ~/Pages/Shared/_Layout.cshtml for Razor Pages ~/Views/Shared/_Layout.cshtml for MVC projects

  • Para usar o contexto de dados existente, selecione pelo menos um arquivo para substituir.To use your existing data context, select at least one file to override. Você deve selecionar pelo menos um arquivo para adicionar o contexto de dados.You must select at least one file to add your data context.
    • Selecione sua classe de contexto de dados.Select your data context class.
    • Selecione Adicionar.Select Add.
  • Para criar um novo contexto de usuário e possivelmente criar uma classe de usuário personalizada para identidade:To create a new user context and possibly create a custom user class for Identity:
    • Selecione o + botão para criar um novo classe de contexto de dados.Select the + button to create a new Data context class.
    • Selecione Adicionar.Select Add.

Observação: Se você estiver criando um novo contexto de usuário, não precisará selecionar um arquivo para substituir.Note: If you're creating a new user context, you don't have to select a file to override.

Algumas opções de identidade são configuradas no Areas/Identity/IdentityHostingStartup.cs.Some Identity options are configured in Areas/Identity/IdentityHostingStartup.cs. Para obter mais informações, consulte IHostingStartup.For more information, see IHostingStartup.

Identidade de Scaffold em um projeto do MVC sem autorização existenteScaffold identity into an MVC project without existing authorization

Execute o scaffolder de identidade:Run the Identity scaffolder:

  • Partir Gerenciador de soluções, clique com botão direito no projeto > Add > New Scaffolded Item.From Solution Explorer, right-click on the project > Add > New Scaffolded Item.
  • No painel à esquerda do adicionar Scaffold caixa de diálogo, selecione identidade > adicionar.From the left pane of the Add Scaffold dialog, select Identity > ADD.
  • No identidade de adição caixa de diálogo, selecione as opções desejadas.In the ADD Identity dialog, select the options you want.
    • Selecione a página de layout existente ou seu arquivo de layout será substituído pela marcação incorreta.Select your existing layout page, or your layout file will be overwritten with incorrect markup. Por exemplo ~/Pages/Shared/_Layout.cshtml para as páginas Razor ~/Views/Shared/_Layout.cshtml para projetos MVCFor example ~/Pages/Shared/_Layout.cshtml for Razor Pages ~/Views/Shared/_Layout.cshtml for MVC projects
    • Selecione o + botão para criar um novo classe de contexto de dados.Select the + button to create a new Data context class.
  • Selecione adicionar.Select ADD.

Opcional: Adicione o logon parcial (_LoginPartial) para o Views/Shared/_Layout.cshtml arquivo:Optional: Add the login partial (_LoginPartial) to the Views/Shared/_Layout.cshtml file:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>@ViewData["Title"] - MvcNoAuth3</title>

    <environment include="Development">
        <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
        <link rel="stylesheet" href="~/css/site.css" />
    </environment>
    <environment exclude="Development">
        <link rel="stylesheet" href="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.7/css/bootstrap.min.css"
              asp-fallback-href="~/lib/bootstrap/dist/css/bootstrap.min.css"
              asp-fallback-test-class="sr-only" asp-fallback-test-property="position" asp-fallback-test-value="absolute" />
        <link rel="stylesheet" href="~/css/site.min.css" asp-append-version="true" />
    </environment>
</head>
<body>
    <nav class="navbar navbar-inverse navbar-fixed-top">
        <div class="container">
            <div class="navbar-header">
                <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
                    <span class="sr-only">Toggle navigation</span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
                <a asp-area="" asp-controller="Home" asp-action="Index" class="navbar-brand">MvcNoAuth3</a>
            </div>
            <div class="navbar-collapse collapse">
                <ul class="nav navbar-nav">
                    <li><a asp-area="" asp-controller="Home" asp-action="Index">Home</a></li>
                    <li><a asp-area="" asp-controller="Home" asp-action="About">About</a></li>
                    <li><a asp-area="" asp-controller="Home" asp-action="Contact">Contact</a></li>
                </ul>
                <partial name="_LoginPartial" />
            </div>
        </div>
    </nav>

    <partial name="_CookieConsentPartial" />

    <div class="container body-content">
        @RenderBody()
        <hr />
        <footer>
            <p>&copy; 2018 - MvcNoAuth3</p>
        </footer>
    </div>

    <environment include="Development">
        <script src="~/lib/jquery/dist/jquery.js"></script>
        <script src="~/lib/bootstrap/dist/js/bootstrap.js"></script>
        <script src="~/js/site.js" asp-append-version="true"></script>
    </environment>
    <environment exclude="Development">
        <script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-3.3.1.min.js"
                asp-fallback-src="~/lib/jquery/dist/jquery.min.js"
                asp-fallback-test="window.jQuery"
                crossorigin="anonymous"
                integrity="sha384-K+ctZQ+LL8q6tP7I94W+qzQsfRV2a+AfHIi9k8z8l9ggpc8X+Ytst4yBo/hH+8Fk">
        </script>
        <script src="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.7/bootstrap.min.js"
                asp-fallback-src="~/lib/bootstrap/dist/js/bootstrap.min.js"
                asp-fallback-test="window.jQuery && window.jQuery.fn && window.jQuery.fn.modal"
                crossorigin="anonymous"
                integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa">
        </script>
        <script src="~/js/site.min.js" asp-append-version="true"></script>
    </environment>

    @RenderSection("Scripts", required: false)
</body>
</html>
  • Mover o Pages/Shared/_LoginPartial.cshtml arquivo Views/Shared/_LoginPartial.cshtmlMove the Pages/Shared/_LoginPartial.cshtml file to Views/Shared/_LoginPartial.cshtml

Identidade é configurada no Areas/Identity/IdentityHostingStartup.cs.Identity is configured in Areas/Identity/IdentityHostingStartup.cs. Para obter mais informações, consulte IHostingStartup.For more information, see IHostingStartup.

Exige que o código de banco de dados de identidade gerado migrações do Entity Framework Core.The generated Identity database code requires Entity Framework Core Migrations. Criar uma migração e atualizar o banco de dados.Create a migration and update the database. Por exemplo, execute os seguintes comandos:For example, run the following commands:

No Visual Studio Package Manager Console:In the Visual Studio Package Manager Console:

Add-Migration CreateIdentitySchema
Update-Database

O parâmetro de nome "CreateIdentitySchema" para o Add-Migration comando é arbitrário.The "CreateIdentitySchema" name parameter for the Add-Migration command is arbitrary. "CreateIdentitySchema" Descreve a migração."CreateIdentitySchema" describes the migration.

Chame UseAuthentication depois UseStaticFiles:Call UseAuthentication after UseStaticFiles:

public class Startup
{

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

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

        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseAuthentication();
        app.UseMvcWithDefaultRoute();
    }
}

UseHsts é recomendável, mas não é necessário.UseHsts is recommended but not required. Ver protocolo de segurança de transporte estrito HTTP para obter mais informações.See HTTP Strict Transport Security Protocol for more information.

Identidade de Scaffold em um projeto do MVC com autorizaçãoScaffold identity into an MVC project with authorization

Execute o scaffolder de identidade:Run the Identity scaffolder:

  • Partir Gerenciador de soluções, clique com botão direito no projeto > Add > New Scaffolded Item.From Solution Explorer, right-click on the project > Add > New Scaffolded Item.
  • No painel esquerdo da caixa de diálogo Adicionar Scaffold , selecione identidade > Adicionar.From the left pane of the Add Scaffold dialog, select Identity > Add.
  • Na caixa de diálogo Adicionar identidade , selecione as opções desejadas.In the Add Identity dialog, select the options you want.
    • Selecione a página de layout existente ou o arquivo de layout será substituído por marcação incorreta.Select your existing layout page, or your layout file will be overwritten with incorrect markup. Quando um arquivo _layout. cshtml existente é selecionado, ele não é substituído.When an existing _Layout.cshtml file is selected, it is not overwritten.

Por exemplo: ~/Pages/Shared/_Layout.cshtml para Razor Pages ~/Views/Shared/_Layout.cshtml para projetos MVCFor example: ~/Pages/Shared/_Layout.cshtml for Razor Pages ~/Views/Shared/_Layout.cshtml for MVC projects

  • Para usar o contexto de dados existente, selecione pelo menos um arquivo para substituir.To use your existing data context, select at least one file to override. Você deve selecionar pelo menos um arquivo para adicionar o contexto de dados.You must select at least one file to add your data context.
    • Selecione sua classe de contexto de dados.Select your data context class.
    • Selecione Adicionar.Select Add.
  • Para criar um novo contexto de usuário e possivelmente criar uma classe de usuário personalizada para identidade:To create a new user context and possibly create a custom user class for Identity:
    • Selecione o + botão para criar um novo classe de contexto de dados.Select the + button to create a new Data context class.
    • Selecione Adicionar.Select Add.

Observação: Se você estiver criando um novo contexto de usuário, não precisará selecionar um arquivo para substituir.Note: If you're creating a new user context, you don't have to select a file to override.

Excluir o páginas/Shared pasta e os arquivos nessa pasta.Delete the Pages/Shared folder and the files in that folder.

Criar fonte de interface do usuário de identidade completaCreate full identity UI source

Para manter o controle total da interface do usuário de identidade, execute o scaffolder de identidade e selecione substituir todos os arquivos.To maintain full control of the Identity UI, run the Identity scaffolder and select Override all files.

O seguinte código realçado mostra as alterações para substituir o padrão de identidade da interface do usuário com identidade em um aplicativo web do ASP.NET Core 2.1.The following highlighted code shows the changes to replace the default Identity UI with Identity in an ASP.NET Core 2.1 web app. Você talvez queira fazer isso para ter controle total sobre a interface do usuário de identidade.You might want to do this to have full control of the Identity UI.

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().SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
        .AddRazorPagesOptions(options =>
        {
            options.AllowAreas = true;
            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>();
}

O padrão de identidade é substituído no código a seguir:The default Identity is replaced in the following code:

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

O seguinte código define a LoginPath, LogoutPath, e AccessDeniedPath:The following code sets the LoginPath, LogoutPath, and AccessDeniedPath:

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

Registrar um IEmailSender implementação, por exemplo:Register an IEmailSender implementation, for example:

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

Recursos adicionaisAdditional resources