Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Por Rick Anderson
Este artigo mostra como migrar um banco de dados e concluir uma atualização de scaffolding de Identity.
Blazor Scaffolding de Identity
O scaffolding do ASP.NET CoreIdentity adiciona ASP.NET Core Identity a aplicativos web Blazor Web App e Blazor Server. Depois que o scaffolder adicionar os componentes IdentityRazor ao aplicativo, você poderá personalizá-los para atender aos requisitos da sua aplicação.
Embora o scaffolder gere o código C# necessário para fazer o scaffolding de Identity no aplicativo, você deve atualizar o banco de dados do projeto com uma migração de banco de dados do Entity Framework Core para concluir o processo. Este artigo descreve as etapas para migrar um banco de dados.
Após executar o scaffolder de Identity, inspecione as alterações. Use GitHub ou outro sistema de controle do código-fonte que mostre alterações de arquivo com um recurso de alterações revertidas.
Os serviços são necessários ao usar autenticação de dois fatores (2FA), confirmação de conta e recuperação de senha e outros recursos de segurança com Identity. Os serviços ou stubs de serviço não são gerados durante o scaffolding do Identity. Os serviços para habilitar esses recursos devem ser adicionados manualmente.
Razor Scaffolding de páginas e MVC Identity
O ASP.NET Core fornece ASP.NET Core Identity como uma biblioteca de classes Razor (RCL). Os aplicativos que incluem Identity podem aplicar o scaffolder para adicionar seletivamente o código-fonte contido na RCL Identity. Talvez você queira gerar o código-fonte para que você possa modificar o código e alterar o comportamento. Por exemplo, você pode instruir o scaffolder a gerar o código usado no registro. O código Identity personalizado substitui a implementação padrão fornecida pela RCL Identity. Para obter controle total da interface do usuário e não usar o RCL padrão, consulte a seção Criar fonte completa da Identity interface do usuário.
Aplicativos que não incluem autenticação podem aplicar o scaffolder para adicionar o pacote RCL do Identity. Você tem a opção de selecionar o Identity código a ser gerado.
Embora o scaffolder gere a maior parte do código necessário, você precisa atualizar seu projeto para concluir o processo. Este artigo apresenta as etapas necessárias para concluir uma atualização de scaffolding de Identity. Após executar o scaffolder de Identity, inspecione as alterações. Use um sistema de controle do código-fonte que mostre diferenças de arquivo e permita que você faça backup das alterações.
Os serviços são necessários ao usar a 2FA, a confirmação da conta e a recuperação de senha e outros recursos de segurança com Identity. Os serviços ou stubs de serviço não são gerados durante o scaffolding do Identity. Os serviços para habilitar esses recursos devem ser adicionados manualmente. Por exemplo, consulte Configurar um provedor de email para que o aplicativo possa exigir confirmação por email.
Normalmente, os aplicativos criados com contas individuais não devem criar um contexto de dados.
Scaffolding de Identity em um projeto de Blazor
Os procedimentos de scaffolding descritos nesta seção aplicam-se a aplicativos web Blazor Web App e Blazor Server.
Execute o scaffolder do Identity:
Em Gerenciador de Soluções, clique com o botão direito do mouse no projeto e selecione Add>New Scaffolded Item.
No painel esquerdo da caixa de diálogo Adicionar Novo Item com Scaffold, selecione Identity.
No painel central, selecione Blazor Identitye selecione Adicionar.
Na caixa de diálogo Adicionar BlazorIdentity :
Selecione o ícone de adição (+) e adicione a classe de contexto de banco de dados, classe DbContext.
Selecione o provedor de banco de dados (Provedor de banco de dados), cujo padrão é o SQL Server.
Selecione o ícone de mais (+) e adicione a classe de usuário, Classe de usuário.
Selecione Adicionar.
O código de banco de dados Identity gerado requer Entity Framework Core Migrations. As etapas a seguir explicam como criar e aplicar uma migração ao banco de dados.
Serviços Conectados do Visual Studio são usados para adicionar uma migração do Entity Framework Core e atualizar o banco de dados.
No Gerenciador de Soluções, clique duas vezes em Serviços Conectados.
Na área SQL Server Express LocalDB de Service Dependencies, selecione More action (... ) >Add migration.
Dê à migração um Nome de migração, como
CreateIdentitySchema, que é um nome que descreve a migração.Aguarde o carregamento do contexto do banco de dados no campo Nomes de classes DbContext. A ação pode levar alguns segundos.
Selecione Concluir para concluir a atualização. Após a conclusão da operação, selecione Fechar.
Selecione Mais ações (...) >Atualizar banco de dados.
O diálogo Atualizar banco de dados com a migração mais recente será aberto.
Aguarde a atualização do campo Nomes de classes DbContext e o carregamento das migrações anteriores. A ação pode levar alguns segundos.
Selecione Concluir para concluir a atualização. Após a conclusão da operação, selecione Fechar.
O comando de atualização do banco de dados executa as migrações de Up que ainda não foram aplicadas, presentes no arquivo de código de migração criado pelo scaffolder. Nesse caso, o comando executa o Up método no arquivo Migrations/{TIME STAMP}_{MIGRATION NAME}.cs , que cria tabelas Identity , restrições e índices. O placeholder {TIME STAMP} é um carimbo de data/hora, e o placeholder {MIGRATION NAME} é o nome da migração.
Aplicativos Blazor do lado do cliente (Independentes Blazor WebAssembly)
Aplicativos Blazor do lado do cliente (Independentes Blazor WebAssembly) utilizam suas próprias abordagens de interface do usuário Identity e não podem utilizar o scaffolding Identity do ASP.NET Core.
Para obter mais informações, consulte os Blazor artigos sobre Segurança e Identity.
Fazer scaffold do Identity em um projeto Razor sem autorização existente
Instale o Microsoft. VisualStudio.Web.CodeGeneration.Design pacote NuGet.
Observação
Para obter diretrizes sobre como adicionar pacotes a aplicativos .NET, consulte os artigos em Instalar e gerenciar pacotes no Fluxo de trabalho de consumo de pacotes (documentação do NuGet). Confirme as versões corretas de pacote em NuGet.org.
Execute o scaffolder Identity seguindo os procedimentos abaixo.
Em Gerenciador de Soluções, clique com o botão direito do mouse no projeto e selecione Add>New Scaffolded Item.
No painel esquerdo da caixa de diálogo Adicionar Novo Item com Scaffold, selecione Identity.
No painel central, selecione Identitye selecione Adicionar.
Na caixa de diálogo Adicionar Identity , selecione as opções desejadas:
Se você tiver uma página de layout personalizada para Identity (_Layout.cshtml), selecione a página existente para evitar sobrescrever seu layout com marcação incorreta gerada pelo scaffolder. Por exemplo, selecione:
- Pages/Shared/_Layout.cshtml para Razor páginas ou projetos de Blazor Server com infraestrutura de páginas Razor.
- Views/Shared/_Layout.cshtml para projetos MVC ou projetos Blazor Server com infraestrutura MVC existente.
Selecione o ícone de adição (+) e adicione a classe de contexto de banco de dados, classe DbContext. Você deve selecionar pelo menos um arquivo para adicionar seu contexto de dados.
Para criar um contexto de dados, selecione o ícone de adição (+). Aceite o valor padrão ou especifique uma nova classe para Identity.
Para criar uma nova classe de usuário, selecione o ícone de adição (+) para a classe User e especifique a classe (por exemplo,
ContosoUserpara uma empresa chamada "Contoso").
Selecione Adicionar para executar o scaffolder.
Migrações, UseAuthentication e layout
O código de banco de dados Identity gerado requer Entity Framework Core Migrations. Se uma migração para gerar o Identity esquema ainda não estiver criada e aplicada ao banco de dados, use os procedimentos a seguir para criar uma migração e atualizar o banco de dados.
Os Serviços Conectados do Visual Studio são usados para adicionar uma migração EF Core e atualizar o banco de dados.
No Gerenciador de Soluções, clique duas vezes em Serviços Conectados.
Na área SQL Server Express LocalDB de Service Dependencies, selecione More actions (... ) >Add migration.
Dê à migração um Nome de migração, como
CreateIdentitySchema, que é um nome que descreve a migração.Aguarde o carregamento do contexto do banco de dados no campo Nomes de classes DbContext. A ação pode levar alguns segundos.
Selecione Concluir para concluir a atualização. Após a conclusão da operação, selecione Fechar.
Selecione Mais ações (...) >Atualizar banco de dados.
O diálogo Atualizar banco de dados com a migração mais recente será aberto.
Aguarde a atualização do campo Nomes de classes DbContext e o carregamento das migrações anteriores. A ação pode levar alguns segundos.
Selecione Concluir para concluir a atualização. Após a conclusão da operação, selecione Fechar.
O comando de atualização do banco de dados executa as migrações de Up que ainda não foram aplicadas, presentes no arquivo de código de migração criado pelo scaffolder. Nesse caso, o comando executa o Up método no arquivo Migrations/{TIME STAMP}_{MIGRATION NAME}.cs , que cria tabelas Identity , restrições e índices. O placeholder {TIME STAMP} é um carimbo de data/hora, e o placeholder {MIGRATION NAME} é o nome da migração.
Se o Identity esquema for criado, mas não aplicado ao banco de dados, você só precisará executar o comando para atualizar o banco de dados:
No Gerenciador de Soluções, clique duas vezes em Serviços Conectados.
Na área SQL Server Express LocalDB de Service Dependencies, selecione More actions (... ) >Update database.
O diálogo Atualizar banco de dados com a migração mais recente será aberto.
Aguarde a atualização do campo Nomes de classes DbContext e o carregamento das migrações anteriores. A ação pode levar alguns segundos.
Selecione Concluir para concluir a atualização. Após a conclusão da operação, selecione Fechar.
Você pode confirmar a aplicação de um esquema do Identity com o comando a seguir. A saída do comando inclui uma coluna "applied" para mostrar quais migrações são aplicadas ao banco de dados.
No Console do Gerenciador de Pacotes do Visual Studio, execute o comando Get-Migration:
Get-Migration
Se houver mais de um contexto de banco de dados, especifique o contexto com o parâmetro -Context.
Alterações de layout
Como opção, você pode adicionar a partial de login (_LoginPartial) ao arquivo de layout:
<!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">
© 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>
Fazer scaffold do Identity em um projeto Razor com autorização
Instale o Microsoft. VisualStudio.Web.CodeGeneration.Design pacote NuGet.
Observação
Para obter diretrizes sobre como adicionar pacotes a aplicativos .NET, consulte os artigos em Instalar e gerenciar pacotes no Fluxo de trabalho de consumo de pacotes (documentação do NuGet). Confirme as versões corretas de pacote em NuGet.org.
Execute o scaffolder Identity seguindo os procedimentos abaixo.
Em Gerenciador de Soluções, clique com o botão direito do mouse no projeto e selecione Add>New Scaffolded Item.
No painel esquerdo da caixa de diálogo Adicionar Novo Item com Scaffold, selecione Identity.
No painel central, selecione Identitye selecione Adicionar.
Na caixa de diálogo Adicionar Identity , selecione as opções desejadas:
Se você tiver uma página de layout personalizada para Identity (_Layout.cshtml), selecione a página existente para evitar sobrescrever seu layout com marcação incorreta gerada pelo scaffolder. Por exemplo, selecione:
- Pages/Shared/_Layout.cshtml para Razor páginas ou projetos de Blazor Server com infraestrutura de páginas Razor.
- Views/Shared/_Layout.cshtml para projetos MVC ou projetos Blazor Server com infraestrutura MVC existente.
Selecione o ícone de adição (+) e adicione a classe de contexto de banco de dados, classe DbContext. Você deve selecionar pelo menos um arquivo para adicionar seu contexto de dados.
Para criar um contexto de dados, selecione o ícone de adição (+). Aceite o valor padrão ou especifique uma classe (por exemplo,
Contoso.Data.ApplicationDbContextpara uma empresa chamada "Contoso").Para criar uma nova classe de usuário, selecione o ícone de adição (+) para a classe User e especifique a classe (por exemplo,
ContosoUserpara uma empresa chamada "Contoso").
Selecione Adicionar para executar o scaffolder.
Faça scaffold do Identity em um projeto MVC sem autorização existente
Instale o Microsoft. VisualStudio.Web.CodeGeneration.Design pacote NuGet.
Observação
Para obter diretrizes sobre como adicionar pacotes a aplicativos .NET, consulte os artigos em Instalar e gerenciar pacotes no Fluxo de trabalho de consumo de pacotes (documentação do NuGet). Confirme as versões corretas de pacote em NuGet.org.
Execute o scaffolder Identity seguindo os procedimentos abaixo.
Em Gerenciador de Soluções, clique com o botão direito do mouse no projeto e selecione Add>New Scaffolded Item.
No painel esquerdo da caixa de diálogo Adicionar Novo Item com Scaffold, selecione Identity.
No painel central, selecione Identitye selecione Adicionar.
Na caixa de diálogo Adicionar Identity , selecione as opções desejadas:
Se você tiver uma página de layout personalizada para Identity (_Layout.cshtml), selecione a página existente para evitar sobrescrever seu layout com marcação incorreta gerada pelo scaffolder. Por exemplo, selecione:
- Pages/Shared/_Layout.cshtml para Razor páginas ou projetos de Blazor Server com infraestrutura de páginas Razor.
- Views/Shared/_Layout.cshtml para projetos MVC ou projetos Blazor Server com infraestrutura MVC existente.
Selecione o ícone de adição (+) e adicione a classe de contexto de banco de dados, classe DbContext. Você deve selecionar pelo menos um arquivo para adicionar seu contexto de dados.
Para criar um contexto de dados, selecione o ícone de adição (+). Aceite o valor padrão ou especifique uma nova classe para Identity.
Para criar uma nova classe de usuário, selecione o ícone de adição (+) para a classe User e especifique a classe (por exemplo,
ContosoUserpara uma empresa chamada "Contoso").
Selecione Adicionar para executar o scaffolder.
Opcional: adicione o trecho de login (_LoginPartial) ao arquivo Views/Shared/_Layout.cshtml:
<!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">
© 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>
O código de banco de dados Identity gerado requer Entity Framework Core Migrations. Se uma migração para gerar o Identity esquema ainda não estiver criada e aplicada ao banco de dados, use os procedimentos a seguir para criar uma migração e atualizar o banco de dados.
Os Serviços Conectados do Visual Studio são usados para adicionar uma migração EF Core e atualizar o banco de dados.
No Gerenciador de Soluções, clique duas vezes em Serviços Conectados.
Na área SQL Server Express LocalDB de Service Dependencies, selecione More actions (... ) >Add migration.
Dê à migração um Nome de migração, como
CreateIdentitySchema, que é um nome que descreve a migração.Aguarde o carregamento do contexto do banco de dados no campo Nomes de classes DbContext. A ação pode levar alguns segundos.
Selecione Concluir para concluir a atualização. Após a conclusão da operação, selecione Fechar.
Selecione Mais ações (...) >Atualizar banco de dados.
O diálogo Atualizar banco de dados com a migração mais recente será aberto.
Aguarde a atualização do campo Nomes de classes DbContext e o carregamento das migrações anteriores. A ação pode levar alguns segundos.
Selecione Concluir para concluir a atualização. Após a conclusão da operação, selecione Fechar.
O comando de atualização do banco de dados executa as migrações de Up que ainda não foram aplicadas, presentes no arquivo de código de migração criado pelo scaffolder. Nesse caso, o comando executa o Up método no arquivo Migrations/{TIME STAMP}_{MIGRATION NAME}.cs , que cria tabelas Identity , restrições e índices. O placeholder {TIME STAMP} é um carimbo de data/hora, e o placeholder {MIGRATION NAME} é o nome da migração.
Se o Identity esquema for criado, mas não aplicado ao banco de dados, você só precisará executar o comando para atualizar o banco de dados:
No Gerenciador de Soluções, clique duas vezes em Serviços Conectados.
Na área SQL Server Express LocalDB de Service Dependencies, selecione More actions (... ) >Update database.
O diálogo Atualizar banco de dados com a migração mais recente será aberto.
Aguarde a atualização do campo Nomes de classes DbContext e o carregamento das migrações anteriores. A ação pode levar alguns segundos.
Selecione Concluir para concluir a atualização. Após a conclusão da operação, selecione Fechar.
Você pode confirmar a aplicação de um esquema do Identity com o comando a seguir. A saída do comando inclui uma coluna "applied" para mostrar quais migrações são aplicadas ao banco de dados.
No Console do Gerenciador de Pacotes do Visual Studio, execute o comando Get-Migration:
Get-Migration
Se houver mais de um contexto de banco de dados, especifique o contexto com o parâmetro -Context.
Adicione MapRazorPages ao arquivo Program.cs conforme mostrado no seguinte código realçado:
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();
Faça scaffold do Identity em um projeto MVC com autorização
Instale o Microsoft. VisualStudio.Web.CodeGeneration.Design pacote NuGet.
Observação
Para obter diretrizes sobre como adicionar pacotes a aplicativos .NET, consulte os artigos em Instalar e gerenciar pacotes no Fluxo de trabalho de consumo de pacotes (documentação do NuGet). Confirme as versões corretas de pacote em NuGet.org.
Execute o scaffolder Identity seguindo os procedimentos abaixo.
Em Gerenciador de Soluções, clique com o botão direito do mouse no projeto e selecione Add>New Scaffolded Item.
No painel esquerdo da caixa de diálogo Adicionar Novo Item com Scaffold, selecione Identity.
No painel central, selecione Identitye selecione Adicionar.
Na caixa de diálogo Adicionar Identity , selecione as opções desejadas:
Se você tiver uma página de layout personalizada para Identity (_Layout.cshtml), selecione a página existente para evitar sobrescrever seu layout com marcação incorreta gerada pelo scaffolder. Por exemplo, selecione:
- Pages/Shared/_Layout.cshtml para Razor páginas ou projetos de Blazor Server com infraestrutura de páginas Razor.
- Views/Shared/_Layout.cshtml para projetos MVC ou projetos Blazor Server com infraestrutura MVC existente.
Selecione o ícone de adição (+) e adicione a classe de contexto de banco de dados, classe DbContext. Você deve selecionar pelo menos um arquivo para adicionar seu contexto de dados.
Para criar um contexto de dados, selecione o ícone de adição (+). Aceite o valor padrão ou especifique uma classe (por exemplo,
Contoso.Data.ApplicationDbContextpara uma empresa chamada "Contoso").Para criar uma nova classe de usuário, selecione o ícone de adição (+) para a classe User e especifique a classe (por exemplo,
ContosoUserpara uma empresa chamada "Contoso").
Selecione Adicionar para executar o scaffolder.
Criar código-fonte completo da interface do usuário Identity
Para manter o controle total da interface do Identity usuário, execute o scaffolder do Identity e selecione Substituir todos os arquivos.
Configuração de senha
Se PasswordOptions estiverem configurados em Startup.ConfigureServices, a configuração StringLengthAttribute poderá ser necessária para a propriedade Password nas páginas Identity geradas automaticamente. O InputModel e suas propriedades Password estão localizados nos seguintes arquivos:
- Áreas/Identity/Páginas/Conta/Register.cshtml.cs
- Areas/Identity/Pages/Account/ResetPassword.cshtml.cs
Desabilitar uma página
Esta seção descreve como desabilitar a página de registro, mas você pode usar a mesma abordagem para desabilitar qualquer página.
Para desabilitar o registro de usuário:
Scaffold do Identity. Incluir
Account.Register,Account.LogineAccount.RegisterConfirmation. Por exemplo:dotnet aspnet-codegenerator identity -dc RPauth.Data.ApplicationDbContext --files "Account.Register;Account.Login;Account.RegisterConfirmation"Atualize o arquivo Áreas/Identity/Páginas/Conta/Register.cshtml.cs para que os usuários não possam se registrar neste ponto de extremidade:
public class RegisterModel : PageModel { public IActionResult OnGet() { return RedirectToPage("Login"); } public IActionResult OnPost() { return RedirectToPage("Login"); } }Atualize o arquivo Areas/Identity/Pages/Account/Register.cshtml para ser consistente com as alterações anteriores:
@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>Comente ou remova o link de registro do arquivo Areas/Identity/Pages/Account/Login.cshtml :
@* <p> <a asp-page="./Register" asp-route-returnUrl="@Model.ReturnUrl">Register as a new user</a> </p> *@Atualize a página
Areas/Identity/Pages/Account/RegisterConfirmation.Remova o código e os links do arquivo .cshtml .
Remova o código de confirmação da
PageModelimplementação:
[AllowAnonymous] public class RegisterConfirmationModel : PageModel { public IActionResult OnGet() { return Page(); } }
Use outro aplicativo para adicionar usuários
Forneça um mecanismo para adicionar usuários fora do aplicativo Web. As opções para adicionar usuários incluem:
- Um aplicativo Web de administrador dedicado
- Um aplicativo de console
O código a seguir descreve uma abordagem para adicionar usuários:
- Leia a lista de usuários na memória.
- Gere uma senha exclusiva forte para cada usuário.
- Adicione o usuário ao Identity banco de dados.
- Notifique o usuário sobre como alterar sua senha.
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>();
});
}
O código a seguir descreve como adicionar um usuário:
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;
}
Uma abordagem semelhante pode ser seguida para cenários de produção.
Impedir a publicação de ativos estáticos Identity
Para impedir a publicação de ativos estáticos do Identity na raiz da Web, confira a Introdução ao Identity no ASP.NET Core.
O ASP.NET Core fornece ASP.NET Core Identity como uma biblioteca de classes Razor (RCL). Os aplicativos que incluem Identity podem aplicar o scaffolder para adicionar seletivamente o código-fonte contido na RCL Identity. Talvez você queira gerar o código-fonte para que você possa modificar o código e alterar o comportamento. Por exemplo, você pode instruir o scaffolder a gerar o código usado no registro. O código gerado tem precedência sobre o mesmo código na RCL Identity. Para obter controle total da UI e não usar a RCL padrão, consulte a seção Criar o código-fonte completo da Identity UI.
Aplicativos que não incluem autenticação podem aplicar o scaffolder para adicionar o pacote RCL do Identity. Você tem a opção de selecionar o código Identity a ser gerado.
Embora o scaffolder gere a maior parte do código necessário, você precisa atualizar seu projeto para concluir o processo. Este documento explica as etapas necessárias para concluir uma atualização de scaffolding do Identity.
É recomendável usar um sistema de controle do código-fonte que mostre diferenças entre os arquivos e permita que você desfaça as alterações. Inspecione as alterações após executar o Identity scaffolder.
Os serviços são necessários ao usar a Autenticação de Dois Fatores, a Confirmação da conta e recuperação de senha e outros recursos de segurança com o Identity. Os serviços ou stubs de serviço não são gerados durante o scaffolding do Identity. Os serviços para habilitar esses recursos devem ser adicionados manualmente. Por exemplo, confira como Exigir confirmação de email.
Normalmente, os aplicativos criados com contas individuais não devem criar um contexto de dados.
Fazer scaffold do Identity em um projeto Razor sem autorização existente
Instale o Microsoft. VisualStudio.Web.CodeGeneration.Design pacote NuGet.
Observação
Para obter diretrizes sobre como adicionar pacotes a aplicativos .NET, consulte os artigos em Instalar e gerenciar pacotes no Fluxo de trabalho de consumo de pacotes (documentação do NuGet). Confirme as versões corretas de pacote em NuGet.org.
Execute o scaffolder Identity seguindo os procedimentos abaixo.
Em Gerenciador de Soluções, clique com o botão direito do mouse no projeto e selecione Add>New Scaffolded Item.
No painel esquerdo da caixa de diálogo Adicionar Novo Item com Scaffold, selecione Identity.
No painel central, selecione Identitye selecione Adicionar.
Na caixa de diálogo Adicionar Identity , selecione as opções desejadas:
Se você tiver uma página de layout personalizada para Identity (_Layout.cshtml), selecione a página existente para evitar sobrescrever seu layout com marcação incorreta gerada pelo scaffolder. Por exemplo, selecione:
- Pages/Shared/_Layout.cshtml para Razor páginas ou projetos de Blazor Server com infraestrutura de páginas Razor.
- Views/Shared/_Layout.cshtml para projetos MVC ou projetos Blazor Server com infraestrutura MVC existente.
Selecione o ícone de adição (+) e adicione a classe de contexto de banco de dados, classe DbContext. Você deve selecionar pelo menos um arquivo para adicionar seu contexto de dados.
Para criar um contexto de dados, selecione o ícone de adição (+). Aceite o valor padrão ou especifique uma nova classe para Identity.
Para criar uma nova classe de usuário, selecione o ícone de adição (+) para a classe User e especifique a classe (por exemplo,
ContosoUserpara uma empresa chamada "Contoso").
Selecione Adicionar para executar o scaffolder.
Migrações, UseAuthentication e layout
O código de banco de dados Identity gerado requer Entity Framework Core Migrations. Se uma migração para gerar o Identity esquema ainda não estiver criada e aplicada ao banco de dados, use os procedimentos a seguir para criar uma migração e atualizar o banco de dados.
Os Serviços Conectados do Visual Studio são usados para adicionar uma migração EF Core e atualizar o banco de dados.
No Gerenciador de Soluções, clique duas vezes em Serviços Conectados.
Na área SQL Server Express LocalDB de Service Dependencies, selecione More actions (... ) >Add migration.
Dê à migração um Nome de migração, como
CreateIdentitySchema, que é um nome que descreve a migração.Aguarde o carregamento do contexto do banco de dados no campo Nomes de classes DbContext. A ação pode levar alguns segundos.
Selecione Concluir para concluir a atualização. Após a conclusão da operação, selecione Fechar.
Selecione Mais ações (...) >Atualizar banco de dados.
O diálogo Atualizar banco de dados com a migração mais recente será aberto.
Aguarde a atualização do campo Nomes de classes DbContext e o carregamento das migrações anteriores. A ação pode levar alguns segundos.
Selecione Concluir para concluir a atualização. Após a conclusão da operação, selecione Fechar.
O comando de atualização do banco de dados executa as migrações de Up que ainda não foram aplicadas, presentes no arquivo de código de migração criado pelo scaffolder. Nesse caso, o comando executa o Up método no arquivo Migrations/{TIME STAMP}_{MIGRATION NAME}.cs , que cria tabelas Identity , restrições e índices. O placeholder {TIME STAMP} é um carimbo de data/hora, e o placeholder {MIGRATION NAME} é o nome da migração.
Se o Identity esquema for criado, mas não aplicado ao banco de dados, você só precisará executar o comando para atualizar o banco de dados:
No Gerenciador de Soluções, clique duas vezes em Serviços Conectados.
Na área SQL Server Express LocalDB de Service Dependencies, selecione More actions (... ) >Update database.
O diálogo Atualizar banco de dados com a migração mais recente será aberto.
Aguarde a atualização do campo Nomes de classes DbContext e o carregamento das migrações anteriores. A ação pode levar alguns segundos.
Selecione Concluir para concluir a atualização. Após a conclusão da operação, selecione Fechar.
Você pode confirmar a aplicação de um esquema do Identity com o comando a seguir. A saída do comando inclui uma coluna "applied" para mostrar quais migrações são aplicadas ao banco de dados.
No Console do Gerenciador de Pacotes do Visual Studio, execute o comando Get-Migration:
Get-Migration
Se houver mais de um contexto de banco de dados, especifique o contexto com o parâmetro -Context.
Alterações de layout
Opcional: adicione a parcial de logon (_LoginPartial) ao arquivo de layout:
<!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">
© 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>
Fazer scaffold do Identity em um projeto Razor com autorização
Instale o Microsoft. VisualStudio.Web.CodeGeneration.Design pacote NuGet.
Observação
Para obter diretrizes sobre como adicionar pacotes a aplicativos .NET, consulte os artigos em Instalar e gerenciar pacotes no Fluxo de trabalho de consumo de pacotes (documentação do NuGet). Confirme as versões corretas de pacote em NuGet.org.
Execute o scaffolder Identity seguindo os procedimentos abaixo.
Em Gerenciador de Soluções, clique com o botão direito do mouse no projeto e selecione Add>New Scaffolded Item.
No painel esquerdo da caixa de diálogo Adicionar Novo Item com Scaffold, selecione Identity.
No painel central, selecione Identitye selecione Adicionar.
Na caixa de diálogo Adicionar Identity , selecione as opções desejadas:
Se você tiver uma página de layout personalizada para Identity (_Layout.cshtml), selecione a página existente para evitar sobrescrever seu layout com marcação incorreta gerada pelo scaffolder. Por exemplo, selecione:
- Pages/Shared/_Layout.cshtml para Razor páginas ou projetos de Blazor Server com infraestrutura de páginas Razor.
- Views/Shared/_Layout.cshtml para projetos MVC ou projetos Blazor Server com infraestrutura MVC existente.
Selecione o ícone de adição (+) e adicione a classe de contexto de banco de dados, classe DbContext. Você deve selecionar pelo menos um arquivo para adicionar seu contexto de dados.
Para criar um contexto de dados, selecione o ícone de adição (+). Aceite o valor padrão ou especifique uma classe (por exemplo,
Contoso.Data.ApplicationDbContextpara uma empresa chamada "Contoso").Para criar uma nova classe de usuário, selecione o ícone de adição (+) para a classe User e especifique a classe (por exemplo,
ContosoUserpara uma empresa chamada "Contoso").
Selecione Adicionar para executar o scaffolder.
Faça scaffold do Identity em um projeto MVC sem autorização existente
Instale o Microsoft. VisualStudio.Web.CodeGeneration.Design pacote NuGet.
Observação
Para obter diretrizes sobre como adicionar pacotes a aplicativos .NET, consulte os artigos em Instalar e gerenciar pacotes no Fluxo de trabalho de consumo de pacotes (documentação do NuGet). Confirme as versões corretas de pacote em NuGet.org.
Execute o scaffolder Identity seguindo os procedimentos abaixo.
Em Gerenciador de Soluções, clique com o botão direito do mouse no projeto e selecione Add>New Scaffolded Item.
No painel esquerdo da caixa de diálogo Adicionar Novo Item com Scaffold, selecione Identity.
No painel central, selecione Identitye selecione Adicionar.
Na caixa de diálogo Adicionar Identity , selecione as opções desejadas:
Se você tiver uma página de layout personalizada para Identity (_Layout.cshtml), selecione a página existente para evitar sobrescrever seu layout com marcação incorreta gerada pelo scaffolder. Por exemplo, selecione:
- Pages/Shared/_Layout.cshtml para Razor páginas ou projetos de Blazor Server com infraestrutura de páginas Razor.
- Views/Shared/_Layout.cshtml para projetos MVC ou projetos Blazor Server com infraestrutura MVC existente.
Selecione o ícone de adição (+) e adicione a classe de contexto de banco de dados, classe DbContext. Você deve selecionar pelo menos um arquivo para adicionar seu contexto de dados.
Para criar um contexto de dados, selecione o ícone de adição (+). Aceite o valor padrão ou especifique uma nova classe para Identity.
Para criar uma nova classe de usuário, selecione o ícone de adição (+) para a classe User e especifique a classe (por exemplo,
ContosoUserpara uma empresa chamada "Contoso").
Selecione Adicionar para executar o scaffolder.
Opcional: adicione o trecho de login (_LoginPartial) ao arquivo Views/Shared/_Layout.cshtml:
<!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">
© 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>
O código de banco de dados Identity gerado requer Entity Framework Core Migrations. Se uma migração para gerar o Identity esquema ainda não estiver criada e aplicada ao banco de dados, use os procedimentos a seguir para criar uma migração e atualizar o banco de dados.
Os Serviços Conectados do Visual Studio são usados para adicionar uma migração EF Core e atualizar o banco de dados.
No Gerenciador de Soluções, clique duas vezes em Serviços Conectados.
Na área SQL Server Express LocalDB de Service Dependencies, selecione More actions (... ) >Add migration.
Dê à migração um Nome de migração, como
CreateIdentitySchema, que é um nome que descreve a migração.Aguarde o carregamento do contexto do banco de dados no campo Nomes de classes DbContext. A ação pode levar alguns segundos.
Selecione Concluir para concluir a atualização. Após a conclusão da operação, selecione Fechar.
Selecione Mais ações (...) >Atualizar banco de dados.
O diálogo Atualizar banco de dados com a migração mais recente será aberto.
Aguarde a atualização do campo Nomes de classes DbContext e o carregamento das migrações anteriores. A ação pode levar alguns segundos.
Selecione Concluir para concluir a atualização. Após a conclusão da operação, selecione Fechar.
O comando de atualização do banco de dados executa as migrações de Up que ainda não foram aplicadas, presentes no arquivo de código de migração criado pelo scaffolder. Nesse caso, o comando executa o Up método no arquivo Migrations/{TIME STAMP}_{MIGRATION NAME}.cs , que cria tabelas Identity , restrições e índices. O placeholder {TIME STAMP} é um carimbo de data/hora, e o placeholder {MIGRATION NAME} é o nome da migração.
Se o Identity esquema for criado, mas não aplicado ao banco de dados, você só precisará executar o comando para atualizar o banco de dados:
No Gerenciador de Soluções, clique duas vezes em Serviços Conectados.
Na área SQL Server Express LocalDB de Service Dependencies, selecione More actions (... ) >Update database.
O diálogo Atualizar banco de dados com a migração mais recente será aberto.
Aguarde a atualização do campo Nomes de classes DbContext e o carregamento das migrações anteriores. A ação pode levar alguns segundos.
Selecione Concluir para concluir a atualização. Após a conclusão da operação, selecione Fechar.
Você pode confirmar a aplicação de um esquema do Identity com o comando a seguir. A saída do comando inclui uma coluna "applied" para mostrar quais migrações são aplicadas ao banco de dados.
No Console do Gerenciador de Pacotes do Visual Studio, execute o comando Get-Migration:
Get-Migration
Se houver mais de um contexto de banco de dados, especifique o contexto com o parâmetro -Context.
Adicione MapRazorPages como Program.cs conforme mostrado no código destacado a seguir:
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();
Faça scaffold do Identity em um projeto MVC com autorização
Instale o Microsoft. VisualStudio.Web.CodeGeneration.Design pacote NuGet.
Observação
Para obter diretrizes sobre como adicionar pacotes a aplicativos .NET, consulte os artigos em Instalar e gerenciar pacotes no Fluxo de trabalho de consumo de pacotes (documentação do NuGet). Confirme as versões corretas de pacote em NuGet.org.
Execute o scaffolder Identity seguindo os procedimentos abaixo.
Em Gerenciador de Soluções, clique com o botão direito do mouse no projeto e selecione Add>New Scaffolded Item.
No painel esquerdo da caixa de diálogo Adicionar Novo Item com Scaffold, selecione Identity.
No painel central, selecione Identitye selecione Adicionar.
Na caixa de diálogo Adicionar Identity , selecione as opções desejadas:
Se você tiver uma página de layout personalizada para Identity (_Layout.cshtml), selecione a página existente para evitar sobrescrever seu layout com marcação incorreta gerada pelo scaffolder. Por exemplo, selecione:
- Pages/Shared/_Layout.cshtml para Razor páginas ou projetos de Blazor Server com infraestrutura de páginas Razor.
- Views/Shared/_Layout.cshtml para projetos MVC ou projetos Blazor Server com infraestrutura MVC existente.
Selecione o ícone de adição (+) e adicione a classe de contexto de banco de dados, classe DbContext. Você deve selecionar pelo menos um arquivo para adicionar seu contexto de dados.
Para criar um contexto de dados, selecione o ícone de adição (+). Aceite o valor padrão ou especifique uma classe (por exemplo,
Contoso.Data.ApplicationDbContextpara uma empresa chamada "Contoso").Para criar uma nova classe de usuário, selecione o ícone de adição (+) para a classe User e especifique a classe (por exemplo,
ContosoUserpara uma empresa chamada "Contoso").
Selecione Adicionar para executar o scaffolder.
Faça scaffolding de Identity em um aplicativo Blazor do servidor com uma autorização
Instale o Microsoft. VisualStudio.Web.CodeGeneration.Design pacote NuGet.
Observação
Para obter diretrizes sobre como adicionar pacotes a aplicativos .NET, consulte os artigos em Instalar e gerenciar pacotes no Fluxo de trabalho de consumo de pacotes (documentação do NuGet). Confirme as versões corretas de pacote em NuGet.org.
Execute o scaffolder Identity seguindo os procedimentos abaixo.
Em Gerenciador de Soluções, clique com o botão direito do mouse no projeto e selecione Add>New Scaffolded Item.
No painel esquerdo da caixa de diálogo Adicionar Novo Item com Scaffold, selecione Identity.
No painel central, selecione Identitye selecione Adicionar.
Na caixa de diálogo Adicionar Identity , selecione as opções desejadas:
Se você tiver uma página de layout personalizada para Identity (_Layout.cshtml), selecione a página existente para evitar sobrescrever seu layout com marcação incorreta gerada pelo scaffolder. Por exemplo, selecione:
- Pages/Shared/_Layout.cshtml para Razor páginas ou projetos de Blazor Server com infraestrutura de páginas Razor.
- Views/Shared/_Layout.cshtml para projetos MVC ou projetos Blazor Server com infraestrutura MVC existente.
Selecione o ícone de adição (+) e adicione a classe de contexto de banco de dados, classe DbContext. Você deve selecionar pelo menos um arquivo para adicionar seu contexto de dados.
Para criar um contexto de dados, selecione o ícone de adição (+). Aceite o valor padrão ou especifique uma classe (por exemplo,
Contoso.Data.ApplicationDbContextpara uma empresa chamada "Contoso").Para criar uma nova classe de usuário, selecione o ícone de adição (+) para a classe User e especifique a classe (por exemplo,
ContosoUserpara uma empresa chamada "Contoso").
Selecione Adicionar para executar o scaffolder.
Migrações
O código de banco de dados Identity gerado requer Entity Framework Core Migrations. Se uma migração para gerar o Identity esquema ainda não estiver criada e aplicada ao banco de dados, use os procedimentos a seguir para criar uma migração e atualizar o banco de dados.
Os Serviços Conectados do Visual Studio são usados para adicionar uma migração EF Core e atualizar o banco de dados.
No Gerenciador de Soluções, clique duas vezes em Serviços Conectados.
Na área SQL Server Express LocalDB de Service Dependencies, selecione More actions (... ) >Add migration.
Dê à migração um Nome de migração, como
CreateIdentitySchema, que é um nome que descreve a migração.Aguarde o carregamento do contexto do banco de dados no campo Nomes de classes DbContext. A ação pode levar alguns segundos.
Selecione Concluir para concluir a atualização. Após a conclusão da operação, selecione Fechar.
Selecione Mais ações (...) >Atualizar banco de dados.
O diálogo Atualizar banco de dados com a migração mais recente será aberto.
Aguarde a atualização do campo Nomes de classes DbContext e o carregamento das migrações anteriores. A ação pode levar alguns segundos.
Selecione Concluir para concluir a atualização. Após a conclusão da operação, selecione Fechar.
O comando de atualização do banco de dados executa as migrações de Up que ainda não foram aplicadas, presentes no arquivo de código de migração criado pelo scaffolder. Nesse caso, o comando executa o Up método no arquivo Migrations/{TIME STAMP}_{MIGRATION NAME}.cs , que cria tabelas Identity , restrições e índices. O placeholder {TIME STAMP} é um carimbo de data/hora, e o placeholder {MIGRATION NAME} é o nome da migração.
Se o Identity esquema for criado, mas não aplicado ao banco de dados, você só precisará executar o comando para atualizar o banco de dados:
No Gerenciador de Soluções, clique duas vezes em Serviços Conectados.
Na área SQL Server Express LocalDB de Service Dependencies, selecione More actions (... ) >Update database.
O diálogo Atualizar banco de dados com a migração mais recente será aberto.
Aguarde a atualização do campo Nomes de classes DbContext e o carregamento das migrações anteriores. A ação pode levar alguns segundos.
Selecione Concluir para concluir a atualização. Após a conclusão da operação, selecione Fechar.
Você pode confirmar a aplicação de um esquema do Identity com o comando a seguir. A saída do comando inclui uma coluna "applied" para mostrar quais migrações são aplicadas ao banco de dados.
No Console do Gerenciador de Pacotes do Visual Studio, execute o comando Get-Migration:
Get-Migration
Se houver mais de um contexto de banco de dados, especifique o contexto com o parâmetro -Context.
Pontos de extremidade de autenticação de estilo
Como os aplicativos Blazor executados no servidor usam as páginas Razor Pages Identity, o estilo da interface do usuário muda quando um visitante navega entre páginas e componentes Identity. Você tem duas opções para abordar os estilos incongruentes:
Componentes Identity personalizados
O ASP.NET Core Identity foi projetado para funcionar no contexto da comunicação de solicitação e resposta HTTP, que não é o modelo principal comunicação cliente-servidor em aplicativos Blazor. Os aplicativos ASP.NET Core que usam o ASP.NET Core Identity para gerenciamento de usuários devem usar Razor Pages em vez de componentes Razor para interface do usuário relacionada a Identity, como registro de usuário, logon, logoff e outras tarefas de gerenciamento de usuários.
Como SignInManager<TUser> e UserManager<TUser> não têm suporte em componentes Razor, recomendamos usar a API Web para gerenciar as ações do Identity a partir de componentes Razor por meio de um aplicativo ASP.NET Core habilitado para Identity do lado do servidor. Para obter diretrizes sobre como criar APIs Web para aplicativos Blazor, confira como Chamar uma API Web de um aplicativo ASP.NET Core Blazor.
Uma abordagem para usar componentes Razor para Identity em vez de páginas Razor é criar seus próprios componentes IdentityRazor personalizados, mas a Microsoft não recomenda nem oferece suporte a essa abordagem. Para contexto adicional, explore as discussões a seguir. Nas discussões a seguir, exemplos de código em comentários de problemas e exemplos de código com links cruzados em repositórios GitHub não pertencentes à Microsoft não têm suporte da Microsoft, mas podem ser úteis para alguns desenvolvedores:
- Suporte ao componente de logon personalizado ao usar o Identity (dotnet/aspnetcore #13601)
-
Reiteração de que o
SigninManager<T>não tem suporte nos Componentes Razor (dotnet/aspnetcore #34095) - Não há informações sobre como realmente implementar um formulário de login personalizado para o Blazor do lado do servidor (dotnet/AspNetCore.Docs #16813)
Para assistência adicional ao tentar criar componentes personalizados do IdentityRazor ou pesquisar componentes Razor de terceiros, recomendamos os seguintes recursos:
-
Stack Overflow (tag:
blazor) (fórum de suporte público) - Equipe Slack do ASP.NET Core (chat de suporte público)
- Blazor Gitter (chat de suporte público)
- Awesome Blazor (Links para recursos Blazor mantidos pela comunidade)
Use um layout personalizado com Blazor estilos do aplicativo
O layout e os estilos das páginas Identity podem ser modificados para produzir páginas que usam estilos semelhantes ao tema Blazor padrão. Essa abordagem não é abordada pela documentação.
Aplicativos Blazor do lado do cliente
Os aplicativos Blazor do lado do cliente usam suas próprias abordagens de interface do usuário do Identity e não podem usar scaffolding do ASP.NET Core Identity. Os aplicativos ASP.NET Core do lado do servidor de soluções Blazor hospedadas podem seguir as diretrizes das Páginas/MVC Razor neste artigo e são configurados como qualquer outro tipo de aplicativo ASP.NET Core que dê suporte ao Identity.
A estruturaBlazor não inclui versões de componente Razorde páginas de interface do usuário Identity. Os componentes de Identity interface do usuário Razor podem ser desenvolvidos sob medida ou obtidos de fontes de terceiros sem suporte.
Para obter mais informações, consulte os Blazor artigos sobre Segurança e Identity.
Criar código-fonte completo da interface do usuário Identity
Para manter o controle total da interface do Identity usuário, execute o scaffolder do Identity e selecione Substituir todos os arquivos.
Configuração de senha
Se PasswordOptions estiverem configurados em Startup.ConfigureServices, a configuração do atributo [StringLength] de poderá ser necessária para a propriedade Password nas páginas Identity geradas automaticamente.
InputModel
Password propriedades são encontradas nos seguintes arquivos:
Areas/Identity/Pages/Account/Register.cshtml.csAreas/Identity/Pages/Account/ResetPassword.cshtml.cs
Desabilitar uma página
Esta seção mostra como desativar a página de registro, mas a abordagem pode ser usada para desativar qualquer página.
Para desabilitar o registro de usuário:
Scaffold do Identity. Inclua Account.Register, Account.Login e Account.RegisterConfirmation. Por exemplo:
dotnet aspnet-codegenerator identity -dc RPauth.Data.ApplicationDbContext --files "Account.Register;Account.Login;Account.RegisterConfirmation"Atualize
Areas/Identity/Pages/Account/Register.cshtml.cspara que os usuários não possam se cadastrar por este endpoint:public class RegisterModel : PageModel { public IActionResult OnGet() { return RedirectToPage("Login"); } public IActionResult OnPost() { return RedirectToPage("Login"); } }Atualize
Areas/Identity/Pages/Account/Register.cshtmlpara ser consistente com as alterações anteriores:@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>Comente ou remova o link de registro de
Areas/Identity/Pages/Account/Login.cshtml@* <p> <a asp-page="./Register" asp-route-returnUrl="@Model.ReturnUrl">Register as a new user</a> </p> *@Atualize a página
Areas/Identity/Pages/Account/RegisterConfirmation.- Remova o código e os links do arquivo cshtml.
- Remova o código de confirmação de
PageModel:
[AllowAnonymous] public class RegisterConfirmationModel : PageModel { public IActionResult OnGet() { return Page(); } }
Use outro aplicativo para adicionar usuários
Forneça um mecanismo para adicionar usuários fora do aplicativo Web. As opções para adicionar usuários incluem:
- Um aplicativo Web de administrador dedicado.
- Um aplicativo de console.
O código a seguir descreve uma abordagem para adicionar usuários:
- Uma lista de usuários é lida na memória.
- Uma senha exclusiva forte é gerada para cada usuário.
- O usuário é adicionado ao banco de dados do Identity.
- O usuário é notificado e orientado a alterar a senha.
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>();
});
}
O código a seguir descreve como adicionar um usuário:
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;
}
Uma abordagem semelhante pode ser seguida para cenários de produção.
Impedir a publicação de ativos estáticos Identity
Para impedir a publicação de ativos estáticos do Identity na raiz da Web, confira a Introdução ao Identity no ASP.NET Core.
O ASP.NET Core fornece ASP.NET Core Identity como uma biblioteca de classes Razor (RCL). Os aplicativos que incluem Identity podem aplicar o scaffolder para adicionar seletivamente o código-fonte contido na RCL Identity. Talvez você queira gerar o código-fonte para que você possa modificar o código e alterar o comportamento. Por exemplo, você pode instruir o scaffolder a gerar o código usado no registro. O código gerado tem precedência sobre o mesmo código na RCL Identity. Para obter controle total da UI e não usar a RCL padrão, consulte a seção Criar o código-fonte completo da Identity UI.
Aplicativos que não incluem autenticação podem aplicar o scaffolder para adicionar o pacote RCL do Identity. Você tem a opção de selecionar o código Identity a ser gerado.
Embora o scaffolder gere a maior parte do código necessário, você precisa atualizar seu projeto para concluir o processo. Este documento explica as etapas necessárias para concluir uma atualização de scaffolding do Identity.
É recomendável usar um sistema de controle do código-fonte que mostre diferenças entre os arquivos e permita que você desfaça as alterações. Inspecione as alterações após executar o Identity scaffolder.
Os serviços são necessários ao usar a Autenticação de Dois Fatores, a Confirmação da conta e recuperação de senha e outros recursos de segurança com o Identity. Os serviços ou stubs de serviço não são gerados durante o scaffolding do Identity. Os serviços para habilitar esses recursos devem ser adicionados manualmente. Por exemplo, confira como Exigir confirmação de email.
Ao gerar a estrutura inicial Identity com um novo contexto de dados em um projeto que já possui contas individuais, abra Startup.ConfigureServices e remova as chamadas para:
AddDbContextAddDefaultIdentity
Por exemplo, AddDbContext e AddDefaultIdentity são comentados no seguinte código:
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();
}
O código anterior comenta o código duplicado em Areas/Identity/IdentityHostingStartup.cs
Normalmente, os aplicativos criados com contas individuais não devem criar um contexto de dados.
Adicionar Identity a um projeto vazio
Execute o scaffolder Identity seguindo os procedimentos abaixo.
Em Gerenciador de Soluções, clique com o botão direito do mouse no projeto e selecione Add>New Scaffolded Item.
No painel esquerdo da caixa de diálogo Adicionar Novo Item com Scaffold, selecione Identity.
No painel central, selecione Identitye selecione Adicionar.
Na caixa de diálogo Adicionar Identity , selecione as opções desejadas:
Se você tiver uma página de layout personalizada para Identity (_Layout.cshtml), selecione a página existente para evitar sobrescrever seu layout com marcação incorreta gerada pelo scaffolder. Por exemplo, selecione:
- Pages/Shared/_Layout.cshtml para Razor páginas ou projetos de Blazor Server com infraestrutura de páginas Razor.
- Views/Shared/_Layout.cshtml para projetos MVC ou projetos Blazor Server com infraestrutura MVC existente.
Selecione o ícone de adição (+) e adicione a classe de contexto de banco de dados, classe DbContext. Você deve selecionar pelo menos um arquivo para adicionar seu contexto de dados.
Para criar um contexto de dados, selecione o ícone de adição (+). Aceite o valor padrão ou especifique uma nova classe para Identity.
Para criar uma nova classe de usuário, selecione o ícone de adição (+) para a classe User e especifique a classe (por exemplo,
ContosoUserpara uma empresa chamada "Contoso").
Selecione Adicionar para executar o scaffolder.
Atualize a classe Startup com código semelhante ao seguinte:
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 é recomendado, mas não é obrigatório. Para obter mais informações, consulte o protocolo HSTS (Http Strict Transport Security).
O código de banco de dados Identity gerado requer Entity Framework Core Migrations. Se uma migração para gerar o Identity esquema ainda não estiver criada e aplicada ao banco de dados, use os procedimentos a seguir para criar uma migração e atualizar o banco de dados.
Os Serviços Conectados do Visual Studio são usados para adicionar uma migração EF Core e atualizar o banco de dados.
No Gerenciador de Soluções, clique duas vezes em Serviços Conectados.
Na área SQL Server Express LocalDB de Service Dependencies, selecione More actions (... ) >Add migration.
Dê à migração um Nome de migração, como
CreateIdentitySchema, que é um nome que descreve a migração.Aguarde o carregamento do contexto do banco de dados no campo Nomes de classes DbContext. A ação pode levar alguns segundos.
Selecione Concluir para concluir a atualização. Após a conclusão da operação, selecione Fechar.
Selecione Mais ações (...) >Atualizar banco de dados.
O diálogo Atualizar banco de dados com a migração mais recente será aberto.
Aguarde a atualização do campo Nomes de classes DbContext e o carregamento das migrações anteriores. A ação pode levar alguns segundos.
Selecione Concluir para concluir a atualização. Após a conclusão da operação, selecione Fechar.
O comando de atualização do banco de dados executa as migrações de Up que ainda não foram aplicadas, presentes no arquivo de código de migração criado pelo scaffolder. Nesse caso, o comando executa o Up método no arquivo Migrations/{TIME STAMP}_{MIGRATION NAME}.cs , que cria tabelas Identity , restrições e índices. O placeholder {TIME STAMP} é um carimbo de data/hora, e o placeholder {MIGRATION NAME} é o nome da migração.
Se o Identity esquema for criado, mas não aplicado ao banco de dados, você só precisará executar o comando para atualizar o banco de dados:
No Gerenciador de Soluções, clique duas vezes em Serviços Conectados.
Na área SQL Server Express LocalDB de Service Dependencies, selecione More actions (... ) >Update database.
O diálogo Atualizar banco de dados com a migração mais recente será aberto.
Aguarde a atualização do campo Nomes de classes DbContext e o carregamento das migrações anteriores. A ação pode levar alguns segundos.
Selecione Concluir para concluir a atualização. Após a conclusão da operação, selecione Fechar.
Você pode confirmar a aplicação de um esquema do Identity com o comando a seguir. A saída do comando inclui uma coluna "applied" para mostrar quais migrações são aplicadas ao banco de dados.
No Console do Gerenciador de Pacotes do Visual Studio, execute o comando Get-Migration:
Get-Migration
Se houver mais de um contexto de banco de dados, especifique o contexto com o parâmetro -Context.
Fazer scaffold do Identity em um projeto Razor sem autorização existente
Execute o scaffolder Identity seguindo os procedimentos abaixo.
Em Gerenciador de Soluções, clique com o botão direito do mouse no projeto e selecione Add>New Scaffolded Item.
No painel esquerdo da caixa de diálogo Adicionar Novo Item com Scaffold, selecione Identity.
No painel central, selecione Identitye selecione Adicionar.
Na caixa de diálogo Adicionar Identity , selecione as opções desejadas:
Se você tiver uma página de layout personalizada para Identity (_Layout.cshtml), selecione a página existente para evitar sobrescrever seu layout com marcação incorreta gerada pelo scaffolder. Por exemplo, selecione:
- Pages/Shared/_Layout.cshtml para Razor páginas ou projetos de Blazor Server com infraestrutura de páginas Razor.
- Views/Shared/_Layout.cshtml para projetos MVC ou projetos Blazor Server com infraestrutura MVC existente.
Selecione o ícone de adição (+) e adicione a classe de contexto de banco de dados, classe DbContext. Você deve selecionar pelo menos um arquivo para adicionar seu contexto de dados.
Para criar um contexto de dados, selecione o ícone de adição (+). Aceite o valor padrão ou especifique uma nova classe para Identity.
Para criar uma nova classe de usuário, selecione o ícone de adição (+) para a classe User e especifique a classe (por exemplo,
ContosoUserpara uma empresa chamada "Contoso").
Selecione Adicionar para executar o scaffolder.
Identity é configurado em Areas/Identity/IdentityHostingStartup.cs. Para obter mais informações, consulte IHostingStartup.
Migrações, UseAuthentication e layout
O código de banco de dados Identity gerado requer Entity Framework Core Migrations. Se uma migração para gerar o Identity esquema ainda não estiver criada e aplicada ao banco de dados, use os procedimentos a seguir para criar uma migração e atualizar o banco de dados.
Os Serviços Conectados do Visual Studio são usados para adicionar uma migração EF Core e atualizar o banco de dados.
No Gerenciador de Soluções, clique duas vezes em Serviços Conectados.
Na área SQL Server Express LocalDB de Service Dependencies, selecione More actions (... ) >Add migration.
Dê à migração um Nome de migração, como
CreateIdentitySchema, que é um nome que descreve a migração.Aguarde o carregamento do contexto do banco de dados no campo Nomes de classes DbContext. A ação pode levar alguns segundos.
Selecione Concluir para concluir a atualização. Após a conclusão da operação, selecione Fechar.
Selecione Mais ações (...) >Atualizar banco de dados.
O diálogo Atualizar banco de dados com a migração mais recente será aberto.
Aguarde a atualização do campo Nomes de classes DbContext e o carregamento das migrações anteriores. A ação pode levar alguns segundos.
Selecione Concluir para concluir a atualização. Após a conclusão da operação, selecione Fechar.
O comando de atualização do banco de dados executa as migrações de Up que ainda não foram aplicadas, presentes no arquivo de código de migração criado pelo scaffolder. Nesse caso, o comando executa o Up método no arquivo Migrations/{TIME STAMP}_{MIGRATION NAME}.cs , que cria tabelas Identity , restrições e índices. O placeholder {TIME STAMP} é um carimbo de data/hora, e o placeholder {MIGRATION NAME} é o nome da migração.
Se o Identity esquema for criado, mas não aplicado ao banco de dados, você só precisará executar o comando para atualizar o banco de dados:
No Gerenciador de Soluções, clique duas vezes em Serviços Conectados.
Na área SQL Server Express LocalDB de Service Dependencies, selecione More actions (... ) >Update database.
O diálogo Atualizar banco de dados com a migração mais recente será aberto.
Aguarde a atualização do campo Nomes de classes DbContext e o carregamento das migrações anteriores. A ação pode levar alguns segundos.
Selecione Concluir para concluir a atualização. Após a conclusão da operação, selecione Fechar.
Você pode confirmar a aplicação de um esquema do Identity com o comando a seguir. A saída do comando inclui uma coluna "applied" para mostrar quais migrações são aplicadas ao banco de dados.
No Console do Gerenciador de Pacotes do Visual Studio, execute o comando Get-Migration:
Get-Migration
Se houver mais de um contexto de banco de dados, especifique o contexto com o parâmetro -Context.
Habilitar autenticação
Atualize a classe Startup com código semelhante ao seguinte:
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 é recomendado, mas não é obrigatório. Para obter mais informações, consulte o protocolo HSTS (Http Strict Transport Security).
Alterações de layout
Opcional: adicione a parcial de logon (_LoginPartial) ao arquivo de layout:
<!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">
© 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>
Fazer scaffold do Identity em um projeto Razor com autorização
Execute o scaffolder Identity seguindo os procedimentos abaixo.
Em Gerenciador de Soluções, clique com o botão direito do mouse no projeto e selecione Add>New Scaffolded Item.
No painel esquerdo da caixa de diálogo Adicionar Novo Item com Scaffold, selecione Identity.
No painel central, selecione Identitye selecione Adicionar.
Na caixa de diálogo Adicionar Identity , selecione as opções desejadas:
Se você tiver uma página de layout personalizada para Identity (_Layout.cshtml), selecione a página existente para evitar sobrescrever seu layout com marcação incorreta gerada pelo scaffolder. Por exemplo, selecione:
- Pages/Shared/_Layout.cshtml para Razor páginas ou projetos de Blazor Server com infraestrutura de páginas Razor.
- Views/Shared/_Layout.cshtml para projetos MVC ou projetos Blazor Server com infraestrutura MVC existente.
Selecione o ícone de adição (+) e adicione a classe de contexto de banco de dados, classe DbContext. Você deve selecionar pelo menos um arquivo para adicionar seu contexto de dados.
Para criar um contexto de dados, selecione o ícone de adição (+). Aceite o valor padrão ou especifique uma classe (por exemplo,
Contoso.Data.ApplicationDbContextpara uma empresa chamada "Contoso").Para criar uma nova classe de usuário, selecione o ícone de adição (+) para a classe User e especifique a classe (por exemplo,
ContosoUserpara uma empresa chamada "Contoso").
Selecione Adicionar para executar o scaffolder.
Algumas opções do Identity são configuradas em Areas/Identity/IdentityHostingStartup.cs. Para obter mais informações, consulte IHostingStartup.
Faça scaffold do Identity em um projeto MVC sem autorização existente
Execute o scaffolder Identity seguindo os procedimentos abaixo.
Em Gerenciador de Soluções, clique com o botão direito do mouse no projeto e selecione Add>New Scaffolded Item.
No painel esquerdo da caixa de diálogo Adicionar Novo Item com Scaffold, selecione Identity.
No painel central, selecione Identitye selecione Adicionar.
Na caixa de diálogo Adicionar Identity , selecione as opções desejadas:
Se você tiver uma página de layout personalizada para Identity (_Layout.cshtml), selecione a página existente para evitar sobrescrever seu layout com marcação incorreta gerada pelo scaffolder. Por exemplo, selecione:
- Pages/Shared/_Layout.cshtml para Razor páginas ou projetos de Blazor Server com infraestrutura de páginas Razor.
- Views/Shared/_Layout.cshtml para projetos MVC ou projetos Blazor Server com infraestrutura MVC existente.
Selecione o ícone de adição (+) e adicione a classe de contexto de banco de dados, classe DbContext. Você deve selecionar pelo menos um arquivo para adicionar seu contexto de dados.
Para criar um contexto de dados, selecione o ícone de adição (+). Aceite o valor padrão ou especifique uma nova classe para Identity.
Para criar uma nova classe de usuário, selecione o ícone de adição (+) para a classe User e especifique a classe (por exemplo,
ContosoUserpara uma empresa chamada "Contoso").
Selecione Adicionar para executar o scaffolder.
Opcional: adicione o trecho de login (_LoginPartial) ao arquivo Views/Shared/_Layout.cshtml:
<!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">
© 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>
Mova o arquivo Pages/Shared/_LoginPartial.cshtml para Views/Shared/_LoginPartial.cshtml.
Identity é configurado em Areas/Identity/IdentityHostingStartup.cs. Para obter mais informações, consulte IHostingStartup.
O código de banco de dados Identity gerado requer Entity Framework Core Migrations. Se uma migração para gerar o Identity esquema ainda não estiver criada e aplicada ao banco de dados, use os procedimentos a seguir para criar uma migração e atualizar o banco de dados.
Os Serviços Conectados do Visual Studio são usados para adicionar uma migração EF Core e atualizar o banco de dados.
No Gerenciador de Soluções, clique duas vezes em Serviços Conectados.
Na área SQL Server Express LocalDB de Service Dependencies, selecione More actions (... ) >Add migration.
Dê à migração um Nome de migração, como
CreateIdentitySchema, que é um nome que descreve a migração.Aguarde o carregamento do contexto do banco de dados no campo Nomes de classes DbContext. A ação pode levar alguns segundos.
Selecione Concluir para concluir a atualização. Após a conclusão da operação, selecione Fechar.
Selecione Mais ações (...) >Atualizar banco de dados.
O diálogo Atualizar banco de dados com a migração mais recente será aberto.
Aguarde a atualização do campo Nomes de classes DbContext e o carregamento das migrações anteriores. A ação pode levar alguns segundos.
Selecione Concluir para concluir a atualização. Após a conclusão da operação, selecione Fechar.
O comando de atualização do banco de dados executa as migrações de Up que ainda não foram aplicadas, presentes no arquivo de código de migração criado pelo scaffolder. Nesse caso, o comando executa o Up método no arquivo Migrations/{TIME STAMP}_{MIGRATION NAME}.cs , que cria tabelas Identity , restrições e índices. O placeholder {TIME STAMP} é um carimbo de data/hora, e o placeholder {MIGRATION NAME} é o nome da migração.
Se o Identity esquema for criado, mas não aplicado ao banco de dados, você só precisará executar o comando para atualizar o banco de dados:
No Gerenciador de Soluções, clique duas vezes em Serviços Conectados.
Na área SQL Server Express LocalDB de Service Dependencies, selecione More actions (... ) >Update database.
O diálogo Atualizar banco de dados com a migração mais recente será aberto.
Aguarde a atualização do campo Nomes de classes DbContext e o carregamento das migrações anteriores. A ação pode levar alguns segundos.
Selecione Concluir para concluir a atualização. Após a conclusão da operação, selecione Fechar.
Você pode confirmar a aplicação de um esquema do Identity com o comando a seguir. A saída do comando inclui uma coluna "applied" para mostrar quais migrações são aplicadas ao banco de dados.
No Console do Gerenciador de Pacotes do Visual Studio, execute o comando Get-Migration:
Get-Migration
Se houver mais de um contexto de banco de dados, especifique o contexto com o parâmetro -Context.
Atualize a classe Startup com código semelhante ao seguinte:
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 é recomendado, mas não é obrigatório. Para obter mais informações, consulte o protocolo HSTS (Http Strict Transport Security).
Faça scaffold do Identity em um projeto MVC com autorização
Execute o scaffolder Identity seguindo os procedimentos abaixo.
Em Gerenciador de Soluções, clique com o botão direito do mouse no projeto e selecione Add>New Scaffolded Item.
No painel esquerdo da caixa de diálogo Adicionar Novo Item com Scaffold, selecione Identity.
No painel central, selecione Identitye selecione Adicionar.
Na caixa de diálogo Adicionar Identity , selecione as opções desejadas:
Se você tiver uma página de layout personalizada para Identity (_Layout.cshtml), selecione a página existente para evitar sobrescrever seu layout com marcação incorreta gerada pelo scaffolder. Por exemplo, selecione:
- Pages/Shared/_Layout.cshtml para Razor páginas ou projetos de Blazor Server com infraestrutura de páginas Razor.
- Views/Shared/_Layout.cshtml para projetos MVC ou projetos Blazor Server com infraestrutura MVC existente.
Selecione o ícone de adição (+) e adicione a classe de contexto de banco de dados, classe DbContext. Você deve selecionar pelo menos um arquivo para adicionar seu contexto de dados.
Para criar um contexto de dados, selecione o ícone de adição (+). Aceite o valor padrão ou especifique uma classe (por exemplo,
Contoso.Data.ApplicationDbContextpara uma empresa chamada "Contoso").Para criar uma nova classe de usuário, selecione o ícone de adição (+) para a classe User e especifique a classe (por exemplo,
ContosoUserpara uma empresa chamada "Contoso").
Selecione Adicionar para executar o scaffolder.
Faça scaffolding de Identity em um aplicativo Blazor do servidor sem uma autorização existente
Execute o scaffolder Identity seguindo os procedimentos abaixo.
Em Gerenciador de Soluções, clique com o botão direito do mouse no projeto e selecione Add>New Scaffolded Item.
No painel esquerdo da caixa de diálogo Adicionar Novo Item com Scaffold, selecione Identity.
No painel central, selecione Identitye selecione Adicionar.
Na caixa de diálogo Adicionar Identity , selecione as opções desejadas:
Se você tiver uma página de layout personalizada para Identity (_Layout.cshtml), selecione a página existente para evitar sobrescrever seu layout com marcação incorreta gerada pelo scaffolder. Por exemplo, selecione:
- Pages/Shared/_Layout.cshtml para Razor páginas ou projetos de Blazor Server com infraestrutura de páginas Razor.
- Views/Shared/_Layout.cshtml para projetos MVC ou projetos Blazor Server com infraestrutura MVC existente.
Selecione o ícone de adição (+) e adicione a classe de contexto de banco de dados, classe DbContext. Você deve selecionar pelo menos um arquivo para adicionar seu contexto de dados.
Para criar um contexto de dados, selecione o ícone de adição (+). Aceite o valor padrão ou especifique uma nova classe para Identity.
Para criar uma nova classe de usuário, selecione o ícone de adição (+) para a classe User e especifique a classe (por exemplo,
ContosoUserpara uma empresa chamada "Contoso").
Selecione Adicionar para executar o scaffolder.
Identity é configurado em Areas/Identity/IdentityHostingStartup.cs. Para obter mais informações, consulte IHostingStartup.
Migrações
O código de banco de dados Identity gerado requer Entity Framework Core Migrations. Se uma migração para gerar o Identity esquema ainda não estiver criada e aplicada ao banco de dados, use os procedimentos a seguir para criar uma migração e atualizar o banco de dados.
Os Serviços Conectados do Visual Studio são usados para adicionar uma migração EF Core e atualizar o banco de dados.
No Gerenciador de Soluções, clique duas vezes em Serviços Conectados.
Na área SQL Server Express LocalDB de Service Dependencies, selecione More actions (... ) >Add migration.
Dê à migração um Nome de migração, como
CreateIdentitySchema, que é um nome que descreve a migração.Aguarde o carregamento do contexto do banco de dados no campo Nomes de classes DbContext. A ação pode levar alguns segundos.
Selecione Concluir para concluir a atualização. Após a conclusão da operação, selecione Fechar.
Selecione Mais ações (...) >Atualizar banco de dados.
O diálogo Atualizar banco de dados com a migração mais recente será aberto.
Aguarde a atualização do campo Nomes de classes DbContext e o carregamento das migrações anteriores. A ação pode levar alguns segundos.
Selecione Concluir para concluir a atualização. Após a conclusão da operação, selecione Fechar.
O comando de atualização do banco de dados executa as migrações de Up que ainda não foram aplicadas, presentes no arquivo de código de migração criado pelo scaffolder. Nesse caso, o comando executa o Up método no arquivo Migrations/{TIME STAMP}_{MIGRATION NAME}.cs , que cria tabelas Identity , restrições e índices. O placeholder {TIME STAMP} é um carimbo de data/hora, e o placeholder {MIGRATION NAME} é o nome da migração.
Se o Identity esquema for criado, mas não aplicado ao banco de dados, você só precisará executar o comando para atualizar o banco de dados:
No Gerenciador de Soluções, clique duas vezes em Serviços Conectados.
Na área SQL Server Express LocalDB de Service Dependencies, selecione More actions (... ) >Update database.
O diálogo Atualizar banco de dados com a migração mais recente será aberto.
Aguarde a atualização do campo Nomes de classes DbContext e o carregamento das migrações anteriores. A ação pode levar alguns segundos.
Selecione Concluir para concluir a atualização. Após a conclusão da operação, selecione Fechar.
Você pode confirmar a aplicação de um esquema do Identity com o comando a seguir. A saída do comando inclui uma coluna "applied" para mostrar quais migrações são aplicadas ao banco de dados.
No Console do Gerenciador de Pacotes do Visual Studio, execute o comando Get-Migration:
Get-Migration
Se houver mais de um contexto de banco de dados, especifique o contexto com o parâmetro -Context.
Pontos de extremidade de autenticação de estilo
Como os aplicativos Blazor executados no servidor usam as páginas Razor Pages Identity, o estilo da interface do usuário muda quando um visitante navega entre páginas e componentes Identity. Você tem duas opções para abordar os estilos incongruentes:
Componentes Identity personalizados
Uma abordagem para usar componentes para o Identity em vez de páginas é criar componentes do Identity. Como SignInManager e UserManager não têm suporte em componentes do Razor, use os pontos de extremidade da API Web no aplicativo Blazor para processar ações da conta de usuário.
Use um layout personalizado com Blazor estilos do aplicativo
O layout e os estilos das páginas Identity podem ser modificados para produzir páginas que usam estilos semelhantes ao tema Blazor padrão. Essa abordagem não é abordada pela documentação.
Faça scaffolding de Identity em um aplicativo Blazor do servidor com uma autorização
Execute o scaffolder Identity seguindo os procedimentos abaixo.
Em Gerenciador de Soluções, clique com o botão direito do mouse no projeto e selecione Add>New Scaffolded Item.
No painel esquerdo da caixa de diálogo Adicionar Novo Item com Scaffold, selecione Identity.
No painel central, selecione Identitye selecione Adicionar.
Na caixa de diálogo Adicionar Identity , selecione as opções desejadas:
Se você tiver uma página de layout personalizada para Identity (_Layout.cshtml), selecione a página existente para evitar sobrescrever seu layout com marcação incorreta gerada pelo scaffolder. Por exemplo, selecione:
- Pages/Shared/_Layout.cshtml para Razor páginas ou projetos de Blazor Server com infraestrutura de páginas Razor.
- Views/Shared/_Layout.cshtml para projetos MVC ou projetos Blazor Server com infraestrutura MVC existente.
Selecione o ícone de adição (+) e adicione a classe de contexto de banco de dados, classe DbContext. Você deve selecionar pelo menos um arquivo para adicionar seu contexto de dados.
Para criar um contexto de dados, selecione o ícone de adição (+). Aceite o valor padrão ou especifique uma classe (por exemplo,
Contoso.Data.ApplicationDbContextpara uma empresa chamada "Contoso").Para criar uma nova classe de usuário, selecione o ícone de adição (+) para a classe User e especifique a classe (por exemplo,
ContosoUserpara uma empresa chamada "Contoso").
Selecione Adicionar para executar o scaffolder.
Algumas opções do Identity são configuradas em Areas/Identity/IdentityHostingStartup.cs. Para obter mais informações, consulte IHostingStartup.
Aplicativos Blazor do lado do cliente
Os aplicativos Blazor do lado do cliente usam suas próprias abordagens de interface do usuário do Identity e não podem usar scaffolding do ASP.NET Core Identity. Os aplicativos ASP.NET Core do lado do servidor de soluções Blazor hospedadas podem seguir as diretrizes das Páginas/MVC Razor neste artigo e são configurados como qualquer outro tipo de aplicativo ASP.NET Core que dê suporte ao Identity.
A estruturaBlazor não inclui versões de componente Razorde páginas de interface do usuário Identity. Os componentes de Identity interface do usuário Razor podem ser desenvolvidos sob medida ou obtidos de fontes de terceiros sem suporte.
Para obter mais informações, consulte os Blazor artigos sobre Segurança e Identity.
Criar código-fonte completo da interface do usuário Identity
Para manter o controle total da interface do Identity usuário, execute o scaffolder do Identity e selecione Substituir todos os arquivos.
O código destacado a seguir mostra as alterações para substituir a interface do usuário padrão do Identity por Identity em um aplicativo Web ASP.NET Core 2.1. Talvez você queira fazer isso para ter controle total sobre a UI do 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>();
}
O valor padrão de Identity é substituído no código a seguir:
services.AddIdentity<IdentityUser, IdentityRole>()
// services.AddDefaultIdentity<IdentityUser>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
O código a seguir define LoginPath, LogoutPath e AccessDeniedPath):
services.ConfigureApplicationCookie(options =>
{
options.LoginPath = $"/Identity/Account/Login";
options.LogoutPath = $"/Identity/Account/Logout";
options.AccessDeniedPath = $"/Identity/Account/AccessDenied";
});
Registre uma implementação IEmailSender, por exemplo:
// 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;
}
}
Configuração de senha
Se PasswordOptions estiverem configurados em Startup.ConfigureServices, a configuração do atributo [StringLength] de poderá ser necessária para a propriedade Password nas páginas Identity geradas automaticamente.
InputModel
Password propriedades são encontradas nos seguintes arquivos:
Areas/Identity/Pages/Account/Register.cshtml.csAreas/Identity/Pages/Account/ResetPassword.cshtml.cs
Desabilitar uma página
Esta seção mostra como desativar a página de registro, mas a abordagem pode ser usada para desativar qualquer página.
Para desabilitar o registro de usuário:
Scaffold do Identity. Inclua Account.Register, Account.Login e Account.RegisterConfirmation. Por exemplo:
dotnet aspnet-codegenerator identity -dc RPauth.Data.ApplicationDbContext --files "Account.Register;Account.Login;Account.RegisterConfirmation"Atualize
Areas/Identity/Pages/Account/Register.cshtml.cspara que os usuários não possam se cadastrar por este endpoint:public class RegisterModel : PageModel { public IActionResult OnGet() { return RedirectToPage("Login"); } public IActionResult OnPost() { return RedirectToPage("Login"); } }Atualize
Areas/Identity/Pages/Account/Register.cshtmlpara ser consistente com as alterações anteriores:@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>Comente ou remova o link de registro de
Areas/Identity/Pages/Account/Login.cshtml@* <p> <a asp-page="./Register" asp-route-returnUrl="@Model.ReturnUrl">Register as a new user</a> </p> *@Atualize a página
Areas/Identity/Pages/Account/RegisterConfirmation.- Remova o código e os links do arquivo cshtml.
- Remova o código de confirmação de
PageModel:
[AllowAnonymous] public class RegisterConfirmationModel : PageModel { public IActionResult OnGet() { return Page(); } }
Use outro aplicativo para adicionar usuários
Forneça um mecanismo para adicionar usuários fora do aplicativo Web. As opções para adicionar usuários incluem:
- Um aplicativo Web de administrador dedicado.
- Um aplicativo de console.
O código a seguir descreve uma abordagem para adicionar usuários:
- Uma lista de usuários é lida na memória.
- Uma senha exclusiva forte é gerada para cada usuário.
- O usuário é adicionado ao banco de dados do Identity.
- O usuário é notificado e orientado a alterar a senha.
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>();
});
}
O código a seguir descreve como adicionar um usuário:
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;
}
Uma abordagem semelhante pode ser seguida para cenários de produção.
Impedir a publicação de ativos estáticos Identity
Para impedir a publicação de ativos estáticos do Identity na raiz da Web, confira a Introdução ao Identity no ASP.NET Core.
Recursos adicionais
Alterações no código de autenticação para ASP.NET Core 2.1 ou posterior