Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Por Rick Anderson
Blazor Identity andaimes
ASP.NET Core Identity geração de código adiciona ASP.NET Core Identity a Blazor Web Apps e Blazor Server aplicações. Depois que o scaffolder adiciona os IdentityRazor componentes ao aplicativo, você pode personalizar os componentes para atender aos requisitos do seu aplicativo.
Embora o scaffolder gere o código C# necessário para o scaffold Identity no aplicativo, você deve atualizar o banco de dados do projeto com uma migração de banco de dados Core do Entity Framework (EF) para concluir o processo. Este artigo explica as etapas necessárias para migrar um banco de dados.
Inspecione as alterações depois de executar o Identity scaffolder. Recomendamos o uso do GitHub ou outro sistema de controle de origem que mostre alterações de arquivo com um recurso de reverter alterações.
Os serviços são necessários quando se utiliza a autenticação de dois fatores (2FA),confirmação de conta e recuperação de senha e outros recursos de segurança com Identity. Serviços ou stubs de serviço não são gerados quando andaimes Identity. Os serviços para habilitar esses recursos devem ser adicionados manualmente.
RazorPáginas e andaimes MVC Identity
ASP.NET Core fornece ASP.NET Core Identity como uma biblioteca de Razor classes (RCL). As aplicações que incluem Identity podem aplicar o scaffolder para adicionar seletivamente o código-fonte contido na Identity RCL. Talvez você queira gerar o código-fonte para poder 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 personalizado Identity substitui a implementação padrão fornecida pela Identity RCL. Para obter controle total da interface do usuário e não usar a RCL padrãoIdentity, consulte a seção Criar fonte completa da interface do usuário.
Os aplicativos que não incluem autenticação podem aplicar o scaffolder para adicionar o pacote RCL Identity . Você tem a opção de selecionar Identity código a ser gerado.
Embora o scaffolder gere a maioria do código necessário, você precisa atualizar seu projeto para concluir o processo. Este documento explica as etapas necessárias para concluir uma Identity atualização de andaime.
Recomendamos o uso de um sistema de controle do código-fonte que mostre as diferenças de arquivo e permita que você recue das alterações. Inspecione as alterações depois de executar o Identity scaffolder.
Os serviços são necessários ao usar a Autenticação de Dois Fatores, a confirmação de conta e a recuperação de senha e outros recursos de segurança com Identityo . Serviços ou stubs de serviço não são gerados quando andaimes Identity. Os serviços para habilitar esses recursos devem ser adicionados manualmente. Por exemplo, consulte Exigir confirmação por e-mail.
Normalmente, os aplicativos criados com contas individuais não devem criar um novo contexto de dados.
Andaime Identity em um Blazor projeto
Esta secção aplica-se a Blazor Web Apps e Blazor Server aplicações.
Execute o Identity gerador de esqueleto:
- No Gerenciador de Soluções, clique com o botão direito do mouse no projeto >Adicionar>Novo Item de Andaime.
- No painel esquerdo da caixa de diálogo Adicionar Novo Item de Andaime , selecione Identity. Selecione Blazor Identity no painel central. Selecione o botão Adicionar .
- Na caixa de diálogo Adicionar BlazorIdentity:
- Selecione ou adicione com o botão de adição (+) a classe de contexto do banco de dados (classe DbContext).
- Selecione o provedor de banco de dados (provedor de banco de dados), cujo padrão é o SQL Server.
- Selecione ou adicione com o botão de adição (+) a classe de usuário (classe de usuário).
- Selecione o botão Adicionar .
O código do banco de dados gerado Identity requer EF Core migrações. As etapas a seguir explicam como criar e aplicar uma migração ao banco de dados.
Os Serviços Conectados do Visual Studio são usados para adicionar uma EF Core migração e atualizar o banco de dados.
No Explorador de Soluções, clique duas vezes em Serviços Conectados. Na área SQL Server Express LocalDB de Dependências de Serviço, selecione as reticências (...) seguidas de Adicionar migração.
Dê à migração um nome de migração, como CreateIdentitySchema, que é um nome que descreve a migração. Aguarde até que o contexto do banco de dados seja carregado no campo nomes de classe DbContext, o que pode levar alguns segundos. Selecione Concluir para criar a migração.
Selecione o botão Fechar após a conclusão da operação.
Selecione as reticências (...) novamente seguidas do comando Atualizar base de dados.
O diálogo Atualizar a base de dados com a migração mais recente é aberto. Aguarde que o campo nomes da classe DbContext seja atualizado e que as migrações anteriores sejam carregadas, o que pode levar alguns segundos. Selecione o botão Concluir.
Selecione o botão Fechar após a conclusão da operação.
O comando update database executa as migrações do método Up que não foram aplicadas em um arquivo de código de migração criado pelo scaffolder. Nesse caso, o comando executa o método Up no arquivo Migrations/{TIME STAMP}_{MIGRATION NAME}.cs, que cria as tabelas Identity, restrições e índices. O espaço reservado {TIME STAMP} é uma marca temporal, e o espaço reservado {MIGRATION NAME} é o nome da migração.
Aplicativos do lado Blazor do cliente (autônomo Blazor WebAssembly)
Os aplicativos cliente Blazor (independentes Blazor WebAssembly) usam as suas próprias Identity abordagens de interface do utilizador e não podem usar a estrutura inicial ASP.NET Core Identity.
Para obter mais informações, consulte Segurança Blazor e Identity artigos.
Estrutura Identity num projeto Razor sem autorização prévia
Instale o pacote NuGet Microsoft.VisualStudio.Web.CodeGeneration.Design.
Observação
Para obter orientação sobre como adicionar pacotes a aplicativos .NET, consulte os artigos na seção Instalar e gerenciar pacotes em Workflow de utilização de pacotes (documentação do NuGet). Confirme as versões corretas do pacote em NuGet.org.
Execute o Identity gerador de esqueleto:
- No Gerenciador de Soluções, clique com o botão direito do mouse no projeto >Adicionar>Novo Item de Andaime.
- No painel esquerdo da caixa de diálogo Adicionar Novo Item de Andaime , selecione Identity. Selecione Identity no painel central. Selecione o botão Adicionar .
- Na caixa de diálogo Adicionar Identity , selecione as opções desejadas.
- Se você tiver uma página de layout personalizada existente para Identity (
_Layout.cshtml), selecione sua página de layout existente para evitar substituir seu layout por marcação incorreta pelo scaffolder. Por exemplo, selecione:-
Pages/Shared/_Layout.cshtmlpara Razor Páginas ou Blazor Server projetos com Razor infraestrutura de Páginas existente. -
Views/Shared/_Layout.cshtmlpara projetos MVC ou Blazor Server projetos com infraestrutura MVC existente.
-
- Para o contexto de dados (classe DbContext):
- Selecione sua classe de contexto de dados. Você deve selecionar pelo menos um arquivo para adicionar seu contexto de dados.
- Para criar um contexto de dados e, possivelmente, criar uma nova classe de usuário para Identity, selecione o + botã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 + botão para Classe de usuário e especifique a classe (por exemplo,ContosoUserpara uma empresa chamada "Contoso").
- Selecione o botão Adicionar para executar o scaffolder.
- Se você tiver uma página de layout personalizada existente para Identity (
Migrações, UseAuthentication e layout
O código do banco de dados gerado Identity requer migrações principais do Entity Framework (EF). Se uma migração para gerar o Identity esquema não tiver sido criada e aplicada ao banco de dados, crie uma migração e atualize o banco de dados.
Os Serviços Conectados do Visual Studio são usados para adicionar uma EF Core migração e atualizar o banco de dados.
No Explorador de Soluções, clique duas vezes em Serviços Conectados. Na área SQL Server Express LocalDB de Dependências de Serviço, selecione as reticências (...) seguidas de Adicionar migração.
Dê à migração um nome de migração, como CreateIdentitySchema, que é um nome que descreve a migração. Aguarde até que o contexto do banco de dados seja carregado no campo nomes de classe DbContext, o que pode levar alguns segundos. Selecione Concluir para criar a migração.
Selecione o botão Fechar após a conclusão da operação.
Selecione as reticências (...) novamente seguidas do comando Atualizar base de dados.
O diálogo Atualizar a base de dados com a migração mais recente é aberto. Aguarde que o campo nomes da classe DbContext seja atualizado e que as migrações anteriores sejam carregadas, o que pode levar alguns segundos. Selecione o botão Concluir.
Selecione o botão Fechar após a conclusão da operação.
O comando update database executa as migrações do método Up que não foram aplicadas em um arquivo de código de migração criado pelo scaffolder. Nesse caso, o comando executa o método Up no arquivo Migrations/{TIME STAMP}_{MIGRATION NAME}.cs, que cria as tabelas Identity, restrições e índices. O espaço reservado {TIME STAMP} é uma marca temporal, e o espaço reservado {MIGRATION NAME} é o nome da migração.
Se o Identity esquema já tiver sido criado, mas não aplicado ao banco de dados, somente o comando para atualizar o banco de dados deverá ser executado:
No Explorador de Soluções, clique duas vezes em Serviços Conectados. Na área SQL Server Express LocalDB das Dependências de Serviço, selecione as reticências (...) e em seguida o comando Atualizar a base de dados.
O diálogo Atualizar a base de dados com a migração mais recente é aberto. Aguarde que o campo nomes da classe DbContext seja atualizado e que as migrações anteriores sejam carregadas, o que pode levar alguns segundos. Selecione o botão Concluir.
Selecione o botão Fechar após a conclusão da operação.
Você pode confirmar a aplicação de um Identity esquema com o seguinte comando. 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 Get-Migration:
Get-Migration
Se existir mais de um contexto de banco de dados, especifique o contexto com o -Context parâmetro.
Alterações de layout
Opcional: Adicione o login parcial (_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>
Scaffold Identity num projeto Razor com autenticação
Instale o pacote NuGet Microsoft.VisualStudio.Web.CodeGeneration.Design.
Observação
Para obter orientação sobre como adicionar pacotes a aplicativos .NET, consulte os artigos na seção Instalar e gerenciar pacotes em Workflow de utilização de pacotes (documentação do NuGet). Confirme as versões corretas do pacote em NuGet.org.
Execute o Identity gerador de esqueleto:
- No Gerenciador de Soluções, clique com o botão direito do mouse no projeto >Adicionar>Novo Item de Andaime.
- No painel esquerdo da caixa de diálogo Adicionar Novo Item de Andaime , selecione Identity. Selecione Identity no painel central. Selecione o botão Adicionar .
- Na caixa de diálogo Adicionar Identity , selecione as opções desejadas.
- Se você tiver uma página de layout personalizada existente para Identity (
_Layout.cshtml), selecione sua página de layout existente para evitar substituir seu layout por marcação incorreta pelo scaffolder. Por exemplo, selecione:-
Pages/Shared/_Layout.cshtmlpara Razor Páginas ou Blazor Server projetos com Razor infraestrutura de Páginas existente. -
Views/Shared/_Layout.cshtmlpara projetos MVC ou Blazor Server projetos com infraestrutura MVC existente.
-
- Para o contexto de dados (classe DbContext):
- Selecione sua classe de contexto de dados. Você deve selecionar pelo menos um arquivo para adicionar seu contexto de dados.
- Para criar um contexto de dados e, possivelmente, criar uma nova classe de usuário para Identity, selecione o + botã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 + botão para Classe de usuário e especifique a classe (por exemplo,ContosoUserpara uma empresa chamada "Contoso").
- Selecione o botão Adicionar para executar o scaffolder.
- Se você tiver uma página de layout personalizada existente para Identity (
Gerar Identity num projeto MVC sem autorização pré-existente
Instale o pacote NuGet Microsoft.VisualStudio.Web.CodeGeneration.Design.
Observação
Para obter orientação sobre como adicionar pacotes a aplicativos .NET, consulte os artigos na seção Instalar e gerenciar pacotes em Workflow de utilização de pacotes (documentação do NuGet). Confirme as versões corretas do pacote em NuGet.org.
Execute o Identity gerador de esqueleto:
- No Gerenciador de Soluções, clique com o botão direito do mouse no projeto >Adicionar>Novo Item de Andaime.
- No painel esquerdo da caixa de diálogo Adicionar Novo Item de Andaime , selecione Identity. Selecione Identity no painel central. Selecione o botão Adicionar .
- Na caixa de diálogo Adicionar Identity , selecione as opções desejadas.
- Se você tiver uma página de layout personalizada existente para Identity (
_Layout.cshtml), selecione sua página de layout existente para evitar substituir seu layout por marcação incorreta pelo scaffolder. Por exemplo, selecione:-
Pages/Shared/_Layout.cshtmlpara Razor Páginas ou Blazor Server projetos com Razor infraestrutura de Páginas existente. -
Views/Shared/_Layout.cshtmlpara projetos MVC ou Blazor Server projetos com infraestrutura MVC existente.
-
- Para o contexto de dados (classe DbContext):
- Selecione sua classe de contexto de dados. Você deve selecionar pelo menos um arquivo para adicionar seu contexto de dados.
- Para criar um contexto de dados e, possivelmente, criar uma nova classe de usuário para Identity, selecione o + botã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 + botão para Classe de usuário e especifique a classe (por exemplo,ContosoUserpara uma empresa chamada "Contoso").
- Selecione o botão Adicionar para executar o scaffolder.
- Se você tiver uma página de layout personalizada existente para Identity (
Opcional: Adicione o login parcial (_LoginPartial) ao Views/Shared/_Layout.cshtml arquivo:
<!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 do banco de dados gerado Identity requer migrações principais do Entity Framework (EF). Se uma migração para gerar o Identity esquema não tiver sido criada e aplicada ao banco de dados, crie uma migração e atualize o banco de dados.
Os Serviços Conectados do Visual Studio são usados para adicionar uma EF Core migração e atualizar o banco de dados.
No Explorador de Soluções, clique duas vezes em Serviços Conectados. Na área SQL Server Express LocalDB de Dependências de Serviço, selecione as reticências (...) seguidas de Adicionar migração.
Dê à migração um nome de migração, como CreateIdentitySchema, que é um nome que descreve a migração. Aguarde até que o contexto do banco de dados seja carregado no campo nomes de classe DbContext, o que pode levar alguns segundos. Selecione Concluir para criar a migração.
Selecione o botão Fechar após a conclusão da operação.
Selecione as reticências (...) novamente seguidas do comando Atualizar base de dados.
O diálogo Atualizar a base de dados com a migração mais recente é aberto. Aguarde que o campo nomes da classe DbContext seja atualizado e que as migrações anteriores sejam carregadas, o que pode levar alguns segundos. Selecione o botão Concluir.
Selecione o botão Fechar após a conclusão da operação.
O comando update database executa as migrações do método Up que não foram aplicadas em um arquivo de código de migração criado pelo scaffolder. Nesse caso, o comando executa o método Up no arquivo Migrations/{TIME STAMP}_{MIGRATION NAME}.cs, que cria as tabelas Identity, restrições e índices. O espaço reservado {TIME STAMP} é uma marca temporal, e o espaço reservado {MIGRATION NAME} é o nome da migração.
Se o Identity esquema já tiver sido criado, mas não aplicado ao banco de dados, somente o comando para atualizar o banco de dados deverá ser executado:
No Explorador de Soluções, clique duas vezes em Serviços Conectados. Na área SQL Server Express LocalDB das Dependências de Serviço, selecione as reticências (...) e em seguida o comando Atualizar a base de dados.
O diálogo Atualizar a base de dados com a migração mais recente é aberto. Aguarde que o campo nomes da classe DbContext seja atualizado e que as migrações anteriores sejam carregadas, o que pode levar alguns segundos. Selecione o botão Concluir.
Selecione o botão Fechar após a conclusão da operação.
Você pode confirmar a aplicação de um Identity esquema com o seguinte comando. 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 Get-Migration:
Get-Migration
Se existir mais de um contexto de banco de dados, especifique o contexto com o -Context parâmetro.
Adicione MapRazorPages ao 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();
Estruturar Identity num projeto MVC com autorização
Instale o pacote NuGet Microsoft.VisualStudio.Web.CodeGeneration.Design.
Observação
Para obter orientação sobre como adicionar pacotes a aplicativos .NET, consulte os artigos na seção Instalar e gerenciar pacotes em Workflow de utilização de pacotes (documentação do NuGet). Confirme as versões corretas do pacote em NuGet.org.
Execute o Identity gerador de esqueleto:
- No Gerenciador de Soluções, clique com o botão direito do mouse no projeto >Adicionar>Novo Item de Andaime.
- No painel esquerdo da caixa de diálogo Adicionar Novo Item de Andaime , selecione Identity. Selecione Identity no painel central. Selecione o botão Adicionar .
- Na caixa de diálogo Adicionar Identity , selecione as opções desejadas.
- Se você tiver uma página de layout personalizada existente para Identity (
_Layout.cshtml), selecione sua página de layout existente para evitar substituir seu layout por marcação incorreta pelo scaffolder. Por exemplo, selecione:-
Pages/Shared/_Layout.cshtmlpara Razor Páginas ou Blazor Server projetos com Razor infraestrutura de Páginas existente. -
Views/Shared/_Layout.cshtmlpara projetos MVC ou Blazor Server projetos com infraestrutura MVC existente.
-
- Para o contexto de dados (classe DbContext):
- Selecione sua classe de contexto de dados. Você deve selecionar pelo menos um arquivo para adicionar seu contexto de dados.
- Para criar um contexto de dados e, possivelmente, criar uma nova classe de usuário para Identity, selecione o + botã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 + botão para Classe de usuário e especifique a classe (por exemplo,ContosoUserpara uma empresa chamada "Contoso").
- Selecione o botão Adicionar para executar o scaffolder.
- Se você tiver uma página de layout personalizada existente para Identity (
Criar fonte de interface do usuário completa Identity
Para manter controlo total da Identity interface, execute o Identity scaffolder e selecione Substituir todos os arquivos.
Configuração da palavra-passe
Se PasswordOptions estiverem configurados no Startup.ConfigureServices, pode ser necessário configurar o atributo [StringLength] para a propriedade Password nas páginas geradas automaticamenteIdentity.
InputModel
Password As propriedades são encontradas nos seguintes ficheiros:
Areas/Identity/Pages/Account/Register.cshtml.csAreas/Identity/Pages/Account/ResetPassword.cshtml.cs
Desativar uma página
Esta seção mostra como desativar a página de registro, mas a abordagem pode ser usada para desabilitar qualquer página.
Para desativar o registo de utilizador:
Andaime Identity. Inclua o Account.Register, o Account.Login e a Account.RegisterConfirmation. Por exemplo:
dotnet aspnet-codegenerator identity -dc RPauth.Data.ApplicationDbContext --files "Account.Register;Account.Login;Account.RegisterConfirmation"Atualizar
Areas/Identity/Pages/Account/Register.cshtml.cspara que os utilizadores não possam se registar a partir deste 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 registo 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 do
PageModel:
[AllowAnonymous] public class RegisterConfirmationModel : PageModel { public IActionResult OnGet() { return Page(); } }
Usar 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:
- Uma aplicação Web de administração dedicada.
- 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 única forte é gerada para cada usuário.
- O usuário é adicionado ao Identity banco de dados.
- O usuário é notificado e instruído 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 a adição de 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 evitar a publicação de ativos estáticos Identity na raiz da web, consulte Introdução ao Identity no ASP.NET Core.
ASP.NET Core fornece ASP.NET Core Identity como uma biblioteca de Razor classes (RCL). As aplicações que incluem Identity podem aplicar o scaffolder para adicionar seletivamente o código-fonte contido na Identity RCL. Talvez você queira gerar o código-fonte para poder 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 Identity RCL. Para obter controle total da interface do utilizador e não usar o padrão RCL, consulte a seção Criar fonte completa Identity da interface do utilizador.
Os aplicativos que não incluem autenticação podem aplicar o scaffolder para adicionar o pacote RCL Identity . Você tem a opção de selecionar Identity código a ser gerado.
Embora o scaffolder gere a maioria do código necessário, você precisa atualizar seu projeto para concluir o processo. Este documento explica as etapas necessárias para concluir uma Identity atualização de andaime.
Recomendamos o uso de um sistema de controle do código-fonte que mostre as diferenças de arquivo e permita que você recue das alterações. Inspecione as alterações depois de executar o Identity scaffolder.
Os serviços são necessários ao usar a Autenticação de Dois Fatores, a confirmação de conta e a recuperação de senha e outros recursos de segurança com Identityo . Serviços ou stubs de serviço não são gerados quando andaimes Identity. Os serviços para habilitar esses recursos devem ser adicionados manualmente. Por exemplo, consulte Exigir confirmação por e-mail.
Normalmente, os aplicativos criados com contas individuais não devem criar um novo contexto de dados.
Estrutura Identity num projeto Razor sem autorização prévia
Instale o pacote NuGet Microsoft.VisualStudio.Web.CodeGeneration.Design.
Observação
Para obter orientação sobre como adicionar pacotes a aplicativos .NET, consulte os artigos na seção Instalar e gerenciar pacotes em Workflow de utilização de pacotes (documentação do NuGet). Confirme as versões corretas do pacote em NuGet.org.
Execute o Identity gerador de esqueleto:
- No Gerenciador de Soluções, clique com o botão direito do mouse no projeto >Adicionar>Novo Item de Andaime.
- No painel esquerdo da caixa de diálogo Adicionar Novo Item de Andaime , selecione Identity. Selecione Identity no painel central. Selecione o botão Adicionar .
- Na caixa de diálogo Adicionar Identity , selecione as opções desejadas.
- Se você tiver uma página de layout personalizada existente para Identity (
_Layout.cshtml), selecione sua página de layout existente para evitar substituir seu layout por marcação incorreta pelo scaffolder. Por exemplo, selecione:-
Pages/Shared/_Layout.cshtmlpara Razor Páginas ou Blazor Server projetos com Razor infraestrutura de Páginas existente. -
Views/Shared/_Layout.cshtmlpara projetos MVC ou Blazor Server projetos com infraestrutura MVC existente.
-
- Para o contexto de dados (classe DbContext):
- Selecione sua classe de contexto de dados. Você deve selecionar pelo menos um arquivo para adicionar seu contexto de dados.
- Para criar um contexto de dados e, possivelmente, criar uma nova classe de usuário para Identity, selecione o + botã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 + botão para Classe de usuário e especifique a classe (por exemplo,ContosoUserpara uma empresa chamada "Contoso").
- Selecione o botão Adicionar para executar o scaffolder.
- Se você tiver uma página de layout personalizada existente para Identity (
Migrações, UseAuthentication e layout
O código do banco de dados gerado Identity requer migrações principais do Entity Framework (EF). Se uma migração para gerar o Identity esquema não tiver sido criada e aplicada ao banco de dados, crie uma migração e atualize o banco de dados.
Os Serviços Conectados do Visual Studio são usados para adicionar uma EF Core migração e atualizar o banco de dados.
No Explorador de Soluções, clique duas vezes em Serviços Conectados. Na área SQL Server Express LocalDB de Dependências de Serviço, selecione as reticências (...) seguidas de Adicionar migração.
Dê à migração um nome de migração, como CreateIdentitySchema, que é um nome que descreve a migração. Aguarde até que o contexto do banco de dados seja carregado no campo nomes de classe DbContext, o que pode levar alguns segundos. Selecione Concluir para criar a migração.
Selecione o botão Fechar após a conclusão da operação.
Selecione as reticências (...) novamente seguidas do comando Atualizar base de dados.
O diálogo Atualizar a base de dados com a migração mais recente é aberto. Aguarde que o campo nomes da classe DbContext seja atualizado e que as migrações anteriores sejam carregadas, o que pode levar alguns segundos. Selecione o botão Concluir.
Selecione o botão Fechar após a conclusão da operação.
O comando update database executa as migrações do método Up que não foram aplicadas em um arquivo de código de migração criado pelo scaffolder. Nesse caso, o comando executa o método Up no arquivo Migrations/{TIME STAMP}_{MIGRATION NAME}.cs, que cria as tabelas Identity, restrições e índices. O espaço reservado {TIME STAMP} é uma marca temporal, e o espaço reservado {MIGRATION NAME} é o nome da migração.
Se o Identity esquema já tiver sido criado, mas não aplicado ao banco de dados, somente o comando para atualizar o banco de dados deverá ser executado:
No Explorador de Soluções, clique duas vezes em Serviços Conectados. Na área SQL Server Express LocalDB das Dependências de Serviço, selecione as reticências (...) e em seguida o comando Atualizar a base de dados.
O diálogo Atualizar a base de dados com a migração mais recente é aberto. Aguarde que o campo nomes da classe DbContext seja atualizado e que as migrações anteriores sejam carregadas, o que pode levar alguns segundos. Selecione o botão Concluir.
Selecione o botão Fechar após a conclusão da operação.
Você pode confirmar a aplicação de um Identity esquema com o seguinte comando. 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 Get-Migration:
Get-Migration
Se existir mais de um contexto de banco de dados, especifique o contexto com o -Context parâmetro.
Alterações de layout
Opcional: Adicione o login parcial (_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>
Scaffold Identity num projeto Razor com autenticação
Instale o pacote NuGet Microsoft.VisualStudio.Web.CodeGeneration.Design.
Observação
Para obter orientação sobre como adicionar pacotes a aplicativos .NET, consulte os artigos na seção Instalar e gerenciar pacotes em Workflow de utilização de pacotes (documentação do NuGet). Confirme as versões corretas do pacote em NuGet.org.
Execute o Identity gerador de esqueleto:
- No Gerenciador de Soluções, clique com o botão direito do mouse no projeto >Adicionar>Novo Item de Andaime.
- No painel esquerdo da caixa de diálogo Adicionar Novo Item de Andaime , selecione Identity. Selecione Identity no painel central. Selecione o botão Adicionar .
- Na caixa de diálogo Adicionar Identity , selecione as opções desejadas.
- Se você tiver uma página de layout personalizada existente para Identity (
_Layout.cshtml), selecione sua página de layout existente para evitar substituir seu layout por marcação incorreta pelo scaffolder. Por exemplo, selecione:-
Pages/Shared/_Layout.cshtmlpara Razor Páginas ou Blazor Server projetos com Razor infraestrutura de Páginas existente. -
Views/Shared/_Layout.cshtmlpara projetos MVC ou Blazor Server projetos com infraestrutura MVC existente.
-
- Para o contexto de dados (classe DbContext):
- Selecione sua classe de contexto de dados. Você deve selecionar pelo menos um arquivo para adicionar seu contexto de dados.
- Para criar um contexto de dados e, possivelmente, criar uma nova classe de usuário para Identity, selecione o + botã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 + botão para Classe de usuário e especifique a classe (por exemplo,ContosoUserpara uma empresa chamada "Contoso").
- Selecione o botão Adicionar para executar o scaffolder.
- Se você tiver uma página de layout personalizada existente para Identity (
Gerar Identity num projeto MVC sem autorização pré-existente
Instale o pacote NuGet Microsoft.VisualStudio.Web.CodeGeneration.Design.
Observação
Para obter orientação sobre como adicionar pacotes a aplicativos .NET, consulte os artigos na seção Instalar e gerenciar pacotes em Workflow de utilização de pacotes (documentação do NuGet). Confirme as versões corretas do pacote em NuGet.org.
Execute o Identity gerador de esqueleto:
- No Gerenciador de Soluções, clique com o botão direito do mouse no projeto >Adicionar>Novo Item de Andaime.
- No painel esquerdo da caixa de diálogo Adicionar Novo Item de Andaime , selecione Identity. Selecione Identity no painel central. Selecione o botão Adicionar .
- Na caixa de diálogo Adicionar Identity , selecione as opções desejadas.
- Se você tiver uma página de layout personalizada existente para Identity (
_Layout.cshtml), selecione sua página de layout existente para evitar substituir seu layout por marcação incorreta pelo scaffolder. Por exemplo, selecione:-
Pages/Shared/_Layout.cshtmlpara Razor Páginas ou Blazor Server projetos com Razor infraestrutura de Páginas existente. -
Views/Shared/_Layout.cshtmlpara projetos MVC ou Blazor Server projetos com infraestrutura MVC existente.
-
- Para o contexto de dados (classe DbContext):
- Selecione sua classe de contexto de dados. Você deve selecionar pelo menos um arquivo para adicionar seu contexto de dados.
- Para criar um contexto de dados e, possivelmente, criar uma nova classe de usuário para Identity, selecione o + botã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 + botão para Classe de usuário e especifique a classe (por exemplo,ContosoUserpara uma empresa chamada "Contoso").
- Selecione o botão Adicionar para executar o scaffolder.
- Se você tiver uma página de layout personalizada existente para Identity (
Opcional: Adicione o login parcial (_LoginPartial) ao Views/Shared/_Layout.cshtml arquivo:
<!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 do banco de dados gerado Identity requer migrações principais do Entity Framework (EF). Se uma migração para gerar o Identity esquema não tiver sido criada e aplicada ao banco de dados, crie uma migração e atualize o banco de dados.
Os Serviços Conectados do Visual Studio são usados para adicionar uma EF Core migração e atualizar o banco de dados.
No Explorador de Soluções, clique duas vezes em Serviços Conectados. Na área SQL Server Express LocalDB de Dependências de Serviço, selecione as reticências (...) seguidas de Adicionar migração.
Dê à migração um nome de migração, como CreateIdentitySchema, que é um nome que descreve a migração. Aguarde até que o contexto do banco de dados seja carregado no campo nomes de classe DbContext, o que pode levar alguns segundos. Selecione Concluir para criar a migração.
Selecione o botão Fechar após a conclusão da operação.
Selecione as reticências (...) novamente seguidas do comando Atualizar base de dados.
O diálogo Atualizar a base de dados com a migração mais recente é aberto. Aguarde que o campo nomes da classe DbContext seja atualizado e que as migrações anteriores sejam carregadas, o que pode levar alguns segundos. Selecione o botão Concluir.
Selecione o botão Fechar após a conclusão da operação.
O comando update database executa as migrações do método Up que não foram aplicadas em um arquivo de código de migração criado pelo scaffolder. Nesse caso, o comando executa o método Up no arquivo Migrations/{TIME STAMP}_{MIGRATION NAME}.cs, que cria as tabelas Identity, restrições e índices. O espaço reservado {TIME STAMP} é uma marca temporal, e o espaço reservado {MIGRATION NAME} é o nome da migração.
Se o Identity esquema já tiver sido criado, mas não aplicado ao banco de dados, somente o comando para atualizar o banco de dados deverá ser executado:
No Explorador de Soluções, clique duas vezes em Serviços Conectados. Na área SQL Server Express LocalDB das Dependências de Serviço, selecione as reticências (...) e em seguida o comando Atualizar a base de dados.
O diálogo Atualizar a base de dados com a migração mais recente é aberto. Aguarde que o campo nomes da classe DbContext seja atualizado e que as migrações anteriores sejam carregadas, o que pode levar alguns segundos. Selecione o botão Concluir.
Selecione o botão Fechar após a conclusão da operação.
Você pode confirmar a aplicação de um Identity esquema com o seguinte comando. 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 Get-Migration:
Get-Migration
Se existir mais de um contexto de banco de dados, especifique o contexto com o -Context parâmetro.
Adicione MapRazorPages ao 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();
Estruturar Identity num projeto MVC com autorização
Instale o pacote NuGet Microsoft.VisualStudio.Web.CodeGeneration.Design.
Observação
Para obter orientação sobre como adicionar pacotes a aplicativos .NET, consulte os artigos na seção Instalar e gerenciar pacotes em Workflow de utilização de pacotes (documentação do NuGet). Confirme as versões corretas do pacote em NuGet.org.
Execute o Identity gerador de esqueleto:
- No Gerenciador de Soluções, clique com o botão direito do mouse no projeto >Adicionar>Novo Item de Andaime.
- No painel esquerdo da caixa de diálogo Adicionar Novo Item de Andaime , selecione Identity. Selecione Identity no painel central. Selecione o botão Adicionar .
- Na caixa de diálogo Adicionar Identity , selecione as opções desejadas.
- Se você tiver uma página de layout personalizada existente para Identity (
_Layout.cshtml), selecione sua página de layout existente para evitar substituir seu layout por marcação incorreta pelo scaffolder. Por exemplo, selecione:-
Pages/Shared/_Layout.cshtmlpara Razor Páginas ou Blazor Server projetos com Razor infraestrutura de Páginas existente. -
Views/Shared/_Layout.cshtmlpara projetos MVC ou Blazor Server projetos com infraestrutura MVC existente.
-
- Para o contexto de dados (classe DbContext):
- Selecione sua classe de contexto de dados. Você deve selecionar pelo menos um arquivo para adicionar seu contexto de dados.
- Para criar um contexto de dados e, possivelmente, criar uma nova classe de usuário para Identity, selecione o + botã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 + botão para Classe de usuário e especifique a classe (por exemplo,ContosoUserpara uma empresa chamada "Contoso").
- Selecione o botão Adicionar para executar o scaffolder.
- Se você tiver uma página de layout personalizada existente para Identity (
Estruturar Identity numa aplicação no lado do servidor com suporte à autorização
Instale o pacote NuGet Microsoft.VisualStudio.Web.CodeGeneration.Design.
Observação
Para obter orientação sobre como adicionar pacotes a aplicativos .NET, consulte os artigos na seção Instalar e gerenciar pacotes em Workflow de utilização de pacotes (documentação do NuGet). Confirme as versões corretas do pacote em NuGet.org.
Execute o Identity gerador de esqueleto:
- No Gerenciador de Soluções, clique com o botão direito do mouse no projeto >Adicionar>Novo Item de Andaime.
- No painel esquerdo da caixa de diálogo Adicionar Novo Item de Andaime , selecione Identity. Selecione Identity no painel central. Selecione o botão Adicionar .
- Na caixa de diálogo Adicionar Identity , selecione as opções desejadas.
- Se você tiver uma página de layout personalizada existente para Identity (
_Layout.cshtml), selecione sua página de layout existente para evitar substituir seu layout por marcação incorreta pelo scaffolder. Por exemplo, selecione:-
Pages/Shared/_Layout.cshtmlpara Razor Páginas ou Blazor Server projetos com Razor infraestrutura de Páginas existente. -
Views/Shared/_Layout.cshtmlpara projetos MVC ou Blazor Server projetos com infraestrutura MVC existente.
-
- Para o contexto de dados (classe DbContext):
- Selecione sua classe de contexto de dados. Você deve selecionar pelo menos um arquivo para adicionar seu contexto de dados.
- Para criar um contexto de dados e, possivelmente, criar uma nova classe de usuário para Identity, selecione o + botã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 + botão para Classe de usuário e especifique a classe (por exemplo,ContosoUserpara uma empresa chamada "Contoso").
- Selecione o botão Adicionar para executar o scaffolder.
- Se você tiver uma página de layout personalizada existente para Identity (
Migrações
O código do banco de dados gerado Identity requer migrações principais do Entity Framework (EF). Se uma migração para gerar o Identity esquema não tiver sido criada e aplicada ao banco de dados, crie uma migração e atualize o banco de dados.
Os Serviços Conectados do Visual Studio são usados para adicionar uma EF Core migração e atualizar o banco de dados.
No Explorador de Soluções, clique duas vezes em Serviços Conectados. Na área SQL Server Express LocalDB de Dependências de Serviço, selecione as reticências (...) seguidas de Adicionar migração.
Dê à migração um nome de migração, como CreateIdentitySchema, que é um nome que descreve a migração. Aguarde até que o contexto do banco de dados seja carregado no campo nomes de classe DbContext, o que pode levar alguns segundos. Selecione Concluir para criar a migração.
Selecione o botão Fechar após a conclusão da operação.
Selecione as reticências (...) novamente seguidas do comando Atualizar base de dados.
O diálogo Atualizar a base de dados com a migração mais recente é aberto. Aguarde que o campo nomes da classe DbContext seja atualizado e que as migrações anteriores sejam carregadas, o que pode levar alguns segundos. Selecione o botão Concluir.
Selecione o botão Fechar após a conclusão da operação.
O comando update database executa as migrações do método Up que não foram aplicadas em um arquivo de código de migração criado pelo scaffolder. Nesse caso, o comando executa o método Up no arquivo Migrations/{TIME STAMP}_{MIGRATION NAME}.cs, que cria as tabelas Identity, restrições e índices. O espaço reservado {TIME STAMP} é uma marca temporal, e o espaço reservado {MIGRATION NAME} é o nome da migração.
Se o Identity esquema já tiver sido criado, mas não aplicado ao banco de dados, somente o comando para atualizar o banco de dados deverá ser executado:
No Explorador de Soluções, clique duas vezes em Serviços Conectados. Na área SQL Server Express LocalDB das Dependências de Serviço, selecione as reticências (...) e em seguida o comando Atualizar a base de dados.
O diálogo Atualizar a base de dados com a migração mais recente é aberto. Aguarde que o campo nomes da classe DbContext seja atualizado e que as migrações anteriores sejam carregadas, o que pode levar alguns segundos. Selecione o botão Concluir.
Selecione o botão Fechar após a conclusão da operação.
Você pode confirmar a aplicação de um Identity esquema com o seguinte comando. 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 Get-Migration:
Get-Migration
Se existir mais de um contexto de banco de dados, especifique o contexto com o -Context parâmetro.
Pontos de extremidade de autenticação de estilo
Como os aplicativos do lado Blazor do servidor usam páginas de Razor Pages Identity, o estilo da interface do usuário muda quando um visitante navega entre Identity páginas e componentes. Você tem duas opções para lidar com os estilos incongruentes:
- Componentes personalizados Identity
- Utilize um layout personalizado com os estilos da aplicação Blazor
Componentes personalizados Identity
ASP.NET Core Identity foi projetado para funcionar no contexto da comunicação de solicitação e resposta HTTP, que não é o principal modelo de comunicação cliente-servidor em Blazor aplicativos. Aplicações ASP.NET Core que utilizam o ASP.NET Core Identity para gestão de utilizadores devem usar Razor Páginas ao invés de componentes Razor para a interface do utilizador relacionada com Identity, como registo de utilizador, iniciar sessão, terminar sessão e outras tarefas de gestão de utilizadores.
Como SignInManager<TUser> e UserManager<TUser> não são suportadas em componentes Razor, recomendamos o uso da API da Web para gerenciar ações Identity dos componentes Razor por meio de uma aplicação ASP.NET Core habilitada para servidor Identity. Para obter orientação sobre como criar APIs da Web para Blazor aplicativos, consulte Chamar uma API da Web a partir de um aplicativo ASP.NET CoreBlazor.
Uma abordagem para usar Razor componentes para Identity em vez de Razor páginas é criar seus próprios componentes personalizados IdentityRazor , mas a Microsoft não recomenda ou dá suporte a essa abordagem. Para contexto adicional, explore as seguintes discussões. 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 que não sejam do Microsoft GitHub não são suportados pela Microsoft, mas podem ser úteis para alguns desenvolvedores:
- Suporte Custom Login Component ao usar Identity (dotnet/aspnetcore #13601)
-
Reiteração sobre o não ser suportado
SigninManager<T>em Razor componentes (dotnet/aspnetcore #34095) - Não há informações sobre como efetivamente implementar o formulário de login personalizado para server-side Blazor (dotnet/AspNetCore.Docs #16813)
Para obter assistência adicional ao procurar criar componentes personalizados IdentityRazor ou procurar componentes de terceiros Razor , recomendamos os seguintes recursos:
-
Stack Overflow (tag:
blazor) (Fórum de suporte público) - ASP.NET Core Slack Team (chat de suporte público)
- Blazor Gitter (Chat de suporte público)
- Espetacular Blazor (Links para recursos mantidos pela Blazor comunidade)
Usar um layout personalizado com Blazor estilos de aplicação
O Identity layout e os estilos de páginas podem ser modificados para produzir páginas que usam estilos semelhantes ao tema padrão Blazor . Essa abordagem não é coberta pela documentação.
Aplicações do lado cliente Blazor
Aplicações cliente Blazor usam as suas próprias abordagens Identity de interface do utilizador e não podem utilizar o scaffolding do ASP.NET Core Identity. Os aplicativos ASP.NET Core do lado do servidor de soluções hospedadas Blazor podem seguir as Razor diretrizes do Pages/MVC neste artigo e são configurados como qualquer outro tipo de aplicativo ASP.NET Core que ofereça suporte ao Identity.
A Blazor estrutura não inclui Razor versões de componentes de páginas de interface do Identity usuário. Identity Razor Os componentes da interface do usuário podem ser personalizados ou obtidos de fontes de terceiros sem suporte.
Para obter mais informações, consulte Segurança Blazor e Identity artigos.
Criar fonte de interface do usuário completa Identity
Para manter controlo total da Identity interface, execute o Identity scaffolder e selecione Substituir todos os arquivos.
Configuração da palavra-passe
Se PasswordOptions estiverem configurados no Startup.ConfigureServices, pode ser necessário configurar o atributo [StringLength] para a propriedade Password nas páginas geradas automaticamenteIdentity.
InputModel
Password As propriedades são encontradas nos seguintes ficheiros:
Areas/Identity/Pages/Account/Register.cshtml.csAreas/Identity/Pages/Account/ResetPassword.cshtml.cs
Desativar uma página
Esta seção mostra como desativar a página de registro, mas a abordagem pode ser usada para desabilitar qualquer página.
Para desativar o registo de utilizador:
Andaime Identity. Inclua o Account.Register, o Account.Login e a Account.RegisterConfirmation. Por exemplo:
dotnet aspnet-codegenerator identity -dc RPauth.Data.ApplicationDbContext --files "Account.Register;Account.Login;Account.RegisterConfirmation"Atualizar
Areas/Identity/Pages/Account/Register.cshtml.cspara que os utilizadores não possam se registar a partir deste 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 registo 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 do
PageModel:
[AllowAnonymous] public class RegisterConfirmationModel : PageModel { public IActionResult OnGet() { return Page(); } }
Usar 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:
- Uma aplicação Web de administração dedicada.
- 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 única forte é gerada para cada usuário.
- O usuário é adicionado ao Identity banco de dados.
- O usuário é notificado e instruído 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 a adição de 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 evitar a publicação de ativos estáticos Identity na raiz da web, consulte Introdução ao Identity no ASP.NET Core.
ASP.NET Core fornece ASP.NET Core Identity como uma biblioteca de Razor classes (RCL). As aplicações que incluem Identity podem aplicar o scaffolder para adicionar seletivamente o código-fonte contido na Identity RCL. Talvez você queira gerar o código-fonte para poder 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 Identity RCL. Para obter controle total da interface do utilizador e não usar o padrão RCL, consulte a seção Criar fonte completa Identity da interface do utilizador.
Os aplicativos que não incluem autenticação podem aplicar o scaffolder para adicionar o pacote RCL Identity . Você tem a opção de selecionar Identity código a ser gerado.
Embora o scaffolder gere a maioria do código necessário, você precisa atualizar seu projeto para concluir o processo. Este documento explica as etapas necessárias para concluir uma Identity atualização de andaime.
Recomendamos o uso de um sistema de controle do código-fonte que mostre as diferenças de arquivo e permita que você recue das alterações. Inspecione as alterações depois de executar o Identity scaffolder.
Os serviços são necessários ao usar a Autenticação de Dois Fatores, a confirmação de conta e a recuperação de senha e outros recursos de segurança com Identityo . Serviços ou stubs de serviço não são gerados quando andaimes Identity. Os serviços para habilitar esses recursos devem ser adicionados manualmente. Por exemplo, consulte Exigir confirmação por e-mail.
Ao estruturar Identity com um novo contexto de dados num projeto com contas individuais existentes, 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 que está duplicado em Areas/Identity/IdentityHostingStartup.cs
Normalmente, os aplicativos criados com contas individuais não devem criar um novo contexto de dados.
Estruturar Identity num projeto vazio
Execute o Identity gerador de esqueleto:
- No Gerenciador de Soluções, clique com o botão direito do mouse no projeto >Adicionar>Novo Item de Andaime.
- No painel esquerdo da caixa de diálogo Adicionar Novo Item de Andaime , selecione Identity. Selecione Identity no painel central. Selecione o botão Adicionar .
- Na caixa de diálogo Adicionar Identity , selecione as opções desejadas.
- Se você tiver uma página de layout personalizada existente para Identity (
_Layout.cshtml), selecione sua página de layout existente para evitar substituir seu layout por marcação incorreta pelo scaffolder. Por exemplo, selecione:-
Pages/Shared/_Layout.cshtmlpara Razor Páginas ou Blazor Server projetos com Razor infraestrutura de Páginas existente. -
Views/Shared/_Layout.cshtmlpara projetos MVC ou Blazor Server projetos com infraestrutura MVC existente.
-
- Para o contexto de dados (classe DbContext):
- Selecione sua classe de contexto de dados. Você deve selecionar pelo menos um arquivo para adicionar seu contexto de dados.
- Para criar um contexto de dados e, possivelmente, criar uma nova classe de usuário para Identity, selecione o + botã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 + botão para Classe de usuário e especifique a classe (por exemplo,ContosoUserpara uma empresa chamada "Contoso").
- Selecione o botão Adicionar para executar o scaffolder.
- Se você tiver uma página de layout personalizada existente para Identity (
Atualize a Startup classe 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 HTTP Strict Transport Security Protocol.
O código do banco de dados gerado Identity requer migrações principais do Entity Framework (EF). Se uma migração para gerar o Identity esquema não tiver sido criada e aplicada ao banco de dados, crie uma migração e atualize o banco de dados.
Os Serviços Conectados do Visual Studio são usados para adicionar uma EF Core migração e atualizar o banco de dados.
No Explorador de Soluções, clique duas vezes em Serviços Conectados. Na área SQL Server Express LocalDB de Dependências de Serviço, selecione as reticências (...) seguidas de Adicionar migração.
Dê à migração um nome de migração, como CreateIdentitySchema, que é um nome que descreve a migração. Aguarde até que o contexto do banco de dados seja carregado no campo nomes de classe DbContext, o que pode levar alguns segundos. Selecione Concluir para criar a migração.
Selecione o botão Fechar após a conclusão da operação.
Selecione as reticências (...) novamente seguidas do comando Atualizar base de dados.
O diálogo Atualizar a base de dados com a migração mais recente é aberto. Aguarde que o campo nomes da classe DbContext seja atualizado e que as migrações anteriores sejam carregadas, o que pode levar alguns segundos. Selecione o botão Concluir.
Selecione o botão Fechar após a conclusão da operação.
O comando update database executa as migrações do método Up que não foram aplicadas em um arquivo de código de migração criado pelo scaffolder. Nesse caso, o comando executa o método Up no arquivo Migrations/{TIME STAMP}_{MIGRATION NAME}.cs, que cria as tabelas Identity, restrições e índices. O espaço reservado {TIME STAMP} é uma marca temporal, e o espaço reservado {MIGRATION NAME} é o nome da migração.
Se o Identity esquema já tiver sido criado, mas não aplicado ao banco de dados, somente o comando para atualizar o banco de dados deverá ser executado:
No Explorador de Soluções, clique duas vezes em Serviços Conectados. Na área SQL Server Express LocalDB das Dependências de Serviço, selecione as reticências (...) e em seguida o comando Atualizar a base de dados.
O diálogo Atualizar a base de dados com a migração mais recente é aberto. Aguarde que o campo nomes da classe DbContext seja atualizado e que as migrações anteriores sejam carregadas, o que pode levar alguns segundos. Selecione o botão Concluir.
Selecione o botão Fechar após a conclusão da operação.
Você pode confirmar a aplicação de um Identity esquema com o seguinte comando. 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 Get-Migration:
Get-Migration
Se existir mais de um contexto de banco de dados, especifique o contexto com o -Context parâmetro.
Estrutura Identity num projeto Razor sem autorização prévia
Execute o Identity gerador de esqueleto:
- No Gerenciador de Soluções, clique com o botão direito do mouse no projeto >Adicionar>Novo Item de Andaime.
- No painel esquerdo da caixa de diálogo Adicionar Novo Item de Andaime , selecione Identity. Selecione Identity no painel central. Selecione o botão Adicionar .
- Na caixa de diálogo Adicionar Identity , selecione as opções desejadas.
- Se você tiver uma página de layout personalizada existente para Identity (
_Layout.cshtml), selecione sua página de layout existente para evitar substituir seu layout por marcação incorreta pelo scaffolder. Por exemplo, selecione:-
Pages/Shared/_Layout.cshtmlpara Razor Páginas ou Blazor Server projetos com Razor infraestrutura de Páginas existente. -
Views/Shared/_Layout.cshtmlpara projetos MVC ou Blazor Server projetos com infraestrutura MVC existente.
-
- Para o contexto de dados (classe DbContext):
- Selecione sua classe de contexto de dados. Você deve selecionar pelo menos um arquivo para adicionar seu contexto de dados.
- Para criar um contexto de dados e, possivelmente, criar uma nova classe de usuário para Identity, selecione o + botã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 + botão para Classe de usuário e especifique a classe (por exemplo,ContosoUserpara uma empresa chamada "Contoso").
- Selecione o botão Adicionar para executar o scaffolder.
- Se você tiver uma página de layout personalizada existente para Identity (
Identity está configurado em Areas/Identity/IdentityHostingStartup.cs. Para obter mais informações, consulte IHostingStartup.
Migrações, UseAuthentication e layout
O código do banco de dados gerado Identity requer migrações principais do Entity Framework (EF). Se uma migração para gerar o Identity esquema não tiver sido criada e aplicada ao banco de dados, crie uma migração e atualize o banco de dados.
Os Serviços Conectados do Visual Studio são usados para adicionar uma EF Core migração e atualizar o banco de dados.
No Explorador de Soluções, clique duas vezes em Serviços Conectados. Na área SQL Server Express LocalDB de Dependências de Serviço, selecione as reticências (...) seguidas de Adicionar migração.
Dê à migração um nome de migração, como CreateIdentitySchema, que é um nome que descreve a migração. Aguarde até que o contexto do banco de dados seja carregado no campo nomes de classe DbContext, o que pode levar alguns segundos. Selecione Concluir para criar a migração.
Selecione o botão Fechar após a conclusão da operação.
Selecione as reticências (...) novamente seguidas do comando Atualizar base de dados.
O diálogo Atualizar a base de dados com a migração mais recente é aberto. Aguarde que o campo nomes da classe DbContext seja atualizado e que as migrações anteriores sejam carregadas, o que pode levar alguns segundos. Selecione o botão Concluir.
Selecione o botão Fechar após a conclusão da operação.
O comando update database executa as migrações do método Up que não foram aplicadas em um arquivo de código de migração criado pelo scaffolder. Nesse caso, o comando executa o método Up no arquivo Migrations/{TIME STAMP}_{MIGRATION NAME}.cs, que cria as tabelas Identity, restrições e índices. O espaço reservado {TIME STAMP} é uma marca temporal, e o espaço reservado {MIGRATION NAME} é o nome da migração.
Se o Identity esquema já tiver sido criado, mas não aplicado ao banco de dados, somente o comando para atualizar o banco de dados deverá ser executado:
No Explorador de Soluções, clique duas vezes em Serviços Conectados. Na área SQL Server Express LocalDB das Dependências de Serviço, selecione as reticências (...) e em seguida o comando Atualizar a base de dados.
O diálogo Atualizar a base de dados com a migração mais recente é aberto. Aguarde que o campo nomes da classe DbContext seja atualizado e que as migrações anteriores sejam carregadas, o que pode levar alguns segundos. Selecione o botão Concluir.
Selecione o botão Fechar após a conclusão da operação.
Você pode confirmar a aplicação de um Identity esquema com o seguinte comando. 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 Get-Migration:
Get-Migration
Se existir mais de um contexto de banco de dados, especifique o contexto com o -Context parâmetro.
Ative a autenticação
Atualize a Startup classe 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 HTTP Strict Transport Security Protocol.
Alterações de layout
Opcional: Adicione o login parcial (_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>
Scaffold Identity num projeto Razor com autenticação
Execute o Identity gerador de esqueleto:
- No Gerenciador de Soluções, clique com o botão direito do mouse no projeto >Adicionar>Novo Item de Andaime.
- No painel esquerdo da caixa de diálogo Adicionar Novo Item de Andaime , selecione Identity. Selecione Identity no painel central. Selecione o botão Adicionar .
- Na caixa de diálogo Adicionar Identity , selecione as opções desejadas.
- Se você tiver uma página de layout personalizada existente para Identity (
_Layout.cshtml), selecione sua página de layout existente para evitar substituir seu layout por marcação incorreta pelo scaffolder. Por exemplo, selecione:-
Pages/Shared/_Layout.cshtmlpara Razor Páginas ou Blazor Server projetos com Razor infraestrutura de Páginas existente. -
Views/Shared/_Layout.cshtmlpara projetos MVC ou Blazor Server projetos com infraestrutura MVC existente.
-
- Para o contexto de dados (classe DbContext):
- Selecione sua classe de contexto de dados. Você deve selecionar pelo menos um arquivo para adicionar seu contexto de dados.
- Para criar um contexto de dados e, possivelmente, criar uma nova classe de usuário para Identity, selecione o + botã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 + botão para Classe de usuário e especifique a classe (por exemplo,ContosoUserpara uma empresa chamada "Contoso").
- Selecione o botão Adicionar para executar o scaffolder.
- Se você tiver uma página de layout personalizada existente para Identity (
Algumas das Identity opções são configuradas em Areas/Identity/IdentityHostingStartup.cs. Para obter mais informações, consulte IHostingStartup.
Gerar Identity num projeto MVC sem autorização pré-existente
Execute o Identity gerador de esqueleto:
- No Gerenciador de Soluções, clique com o botão direito do mouse no projeto >Adicionar>Novo Item de Andaime.
- No painel esquerdo da caixa de diálogo Adicionar Novo Item de Andaime , selecione Identity. Selecione Identity no painel central. Selecione o botão Adicionar .
- Na caixa de diálogo Adicionar Identity , selecione as opções desejadas.
- Se você tiver uma página de layout personalizada existente para Identity (
_Layout.cshtml), selecione sua página de layout existente para evitar substituir seu layout por marcação incorreta pelo scaffolder. Por exemplo, selecione:-
Pages/Shared/_Layout.cshtmlpara Razor Páginas ou Blazor Server projetos com Razor infraestrutura de Páginas existente. -
Views/Shared/_Layout.cshtmlpara projetos MVC ou Blazor Server projetos com infraestrutura MVC existente.
-
- Para o contexto de dados (classe DbContext):
- Selecione sua classe de contexto de dados. Você deve selecionar pelo menos um arquivo para adicionar seu contexto de dados.
- Para criar um contexto de dados e, possivelmente, criar uma nova classe de usuário para Identity, selecione o + botã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 + botão para Classe de usuário e especifique a classe (por exemplo,ContosoUserpara uma empresa chamada "Contoso").
- Selecione o botão Adicionar para executar o scaffolder.
- Se você tiver uma página de layout personalizada existente para Identity (
Opcional: Adicione o login parcial (_LoginPartial) ao Views/Shared/_Layout.cshtml arquivo:
<!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 Pages/Shared/_LoginPartial.cshtml arquivo para Views/Shared/_LoginPartial.cshtml.
Identity está configurado em Areas/Identity/IdentityHostingStartup.cs. Para obter mais informações, consulte IHostingStartup.
O código do banco de dados gerado Identity requer migrações principais do Entity Framework (EF). Se uma migração para gerar o Identity esquema não tiver sido criada e aplicada ao banco de dados, crie uma migração e atualize o banco de dados.
Os Serviços Conectados do Visual Studio são usados para adicionar uma EF Core migração e atualizar o banco de dados.
No Explorador de Soluções, clique duas vezes em Serviços Conectados. Na área SQL Server Express LocalDB de Dependências de Serviço, selecione as reticências (...) seguidas de Adicionar migração.
Dê à migração um nome de migração, como CreateIdentitySchema, que é um nome que descreve a migração. Aguarde até que o contexto do banco de dados seja carregado no campo nomes de classe DbContext, o que pode levar alguns segundos. Selecione Concluir para criar a migração.
Selecione o botão Fechar após a conclusão da operação.
Selecione as reticências (...) novamente seguidas do comando Atualizar base de dados.
O diálogo Atualizar a base de dados com a migração mais recente é aberto. Aguarde que o campo nomes da classe DbContext seja atualizado e que as migrações anteriores sejam carregadas, o que pode levar alguns segundos. Selecione o botão Concluir.
Selecione o botão Fechar após a conclusão da operação.
O comando update database executa as migrações do método Up que não foram aplicadas em um arquivo de código de migração criado pelo scaffolder. Nesse caso, o comando executa o método Up no arquivo Migrations/{TIME STAMP}_{MIGRATION NAME}.cs, que cria as tabelas Identity, restrições e índices. O espaço reservado {TIME STAMP} é uma marca temporal, e o espaço reservado {MIGRATION NAME} é o nome da migração.
Se o Identity esquema já tiver sido criado, mas não aplicado ao banco de dados, somente o comando para atualizar o banco de dados deverá ser executado:
No Explorador de Soluções, clique duas vezes em Serviços Conectados. Na área SQL Server Express LocalDB das Dependências de Serviço, selecione as reticências (...) e em seguida o comando Atualizar a base de dados.
O diálogo Atualizar a base de dados com a migração mais recente é aberto. Aguarde que o campo nomes da classe DbContext seja atualizado e que as migrações anteriores sejam carregadas, o que pode levar alguns segundos. Selecione o botão Concluir.
Selecione o botão Fechar após a conclusão da operação.
Você pode confirmar a aplicação de um Identity esquema com o seguinte comando. 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 Get-Migration:
Get-Migration
Se existir mais de um contexto de banco de dados, especifique o contexto com o -Context parâmetro.
Atualize a Startup classe 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 HTTP Strict Transport Security Protocol.
Estruturar Identity num projeto MVC com autorização
Execute o Identity gerador de esqueleto:
- No Gerenciador de Soluções, clique com o botão direito do mouse no projeto >Adicionar>Novo Item de Andaime.
- No painel esquerdo da caixa de diálogo Adicionar Novo Item de Andaime , selecione Identity. Selecione Identity no painel central. Selecione o botão Adicionar .
- Na caixa de diálogo Adicionar Identity , selecione as opções desejadas.
- Se você tiver uma página de layout personalizada existente para Identity (
_Layout.cshtml), selecione sua página de layout existente para evitar substituir seu layout por marcação incorreta pelo scaffolder. Por exemplo, selecione:-
Pages/Shared/_Layout.cshtmlpara Razor Páginas ou Blazor Server projetos com Razor infraestrutura de Páginas existente. -
Views/Shared/_Layout.cshtmlpara projetos MVC ou Blazor Server projetos com infraestrutura MVC existente.
-
- Para o contexto de dados (classe DbContext):
- Selecione sua classe de contexto de dados. Você deve selecionar pelo menos um arquivo para adicionar seu contexto de dados.
- Para criar um contexto de dados e, possivelmente, criar uma nova classe de usuário para Identity, selecione o + botã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 + botão para Classe de usuário e especifique a classe (por exemplo,ContosoUserpara uma empresa chamada "Contoso").
- Selecione o botão Adicionar para executar o scaffolder.
- Se você tiver uma página de layout personalizada existente para Identity (
Incorporar Identity numa aplicação do lado do servidor Blazor sem autorização existente
Execute o Identity gerador de esqueleto:
- No Gerenciador de Soluções, clique com o botão direito do mouse no projeto >Adicionar>Novo Item de Andaime.
- No painel esquerdo da caixa de diálogo Adicionar Novo Item de Andaime , selecione Identity. Selecione Identity no painel central. Selecione o botão Adicionar .
- Na caixa de diálogo Adicionar Identity , selecione as opções desejadas.
- Se você tiver uma página de layout personalizada existente para Identity (
_Layout.cshtml), selecione sua página de layout existente para evitar substituir seu layout por marcação incorreta pelo scaffolder. Por exemplo, selecione:-
Pages/Shared/_Layout.cshtmlpara Razor Páginas ou Blazor Server projetos com Razor infraestrutura de Páginas existente. -
Views/Shared/_Layout.cshtmlpara projetos MVC ou Blazor Server projetos com infraestrutura MVC existente.
-
- Para o contexto de dados (classe DbContext):
- Selecione sua classe de contexto de dados. Você deve selecionar pelo menos um arquivo para adicionar seu contexto de dados.
- Para criar um contexto de dados e, possivelmente, criar uma nova classe de usuário para Identity, selecione o + botã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 + botão para Classe de usuário e especifique a classe (por exemplo,ContosoUserpara uma empresa chamada "Contoso").
- Selecione o botão Adicionar para executar o scaffolder.
- Se você tiver uma página de layout personalizada existente para Identity (
Identity está configurado em Areas/Identity/IdentityHostingStartup.cs. Para obter mais informações, consulte IHostingStartup.
Migrações
O código do banco de dados gerado Identity requer migrações principais do Entity Framework (EF). Se uma migração para gerar o Identity esquema não tiver sido criada e aplicada ao banco de dados, crie uma migração e atualize o banco de dados.
Os Serviços Conectados do Visual Studio são usados para adicionar uma EF Core migração e atualizar o banco de dados.
No Explorador de Soluções, clique duas vezes em Serviços Conectados. Na área SQL Server Express LocalDB de Dependências de Serviço, selecione as reticências (...) seguidas de Adicionar migração.
Dê à migração um nome de migração, como CreateIdentitySchema, que é um nome que descreve a migração. Aguarde até que o contexto do banco de dados seja carregado no campo nomes de classe DbContext, o que pode levar alguns segundos. Selecione Concluir para criar a migração.
Selecione o botão Fechar após a conclusão da operação.
Selecione as reticências (...) novamente seguidas do comando Atualizar base de dados.
O diálogo Atualizar a base de dados com a migração mais recente é aberto. Aguarde que o campo nomes da classe DbContext seja atualizado e que as migrações anteriores sejam carregadas, o que pode levar alguns segundos. Selecione o botão Concluir.
Selecione o botão Fechar após a conclusão da operação.
O comando update database executa as migrações do método Up que não foram aplicadas em um arquivo de código de migração criado pelo scaffolder. Nesse caso, o comando executa o método Up no arquivo Migrations/{TIME STAMP}_{MIGRATION NAME}.cs, que cria as tabelas Identity, restrições e índices. O espaço reservado {TIME STAMP} é uma marca temporal, e o espaço reservado {MIGRATION NAME} é o nome da migração.
Se o Identity esquema já tiver sido criado, mas não aplicado ao banco de dados, somente o comando para atualizar o banco de dados deverá ser executado:
No Explorador de Soluções, clique duas vezes em Serviços Conectados. Na área SQL Server Express LocalDB das Dependências de Serviço, selecione as reticências (...) e em seguida o comando Atualizar a base de dados.
O diálogo Atualizar a base de dados com a migração mais recente é aberto. Aguarde que o campo nomes da classe DbContext seja atualizado e que as migrações anteriores sejam carregadas, o que pode levar alguns segundos. Selecione o botão Concluir.
Selecione o botão Fechar após a conclusão da operação.
Você pode confirmar a aplicação de um Identity esquema com o seguinte comando. 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 Get-Migration:
Get-Migration
Se existir mais de um contexto de banco de dados, especifique o contexto com o -Context parâmetro.
Pontos de extremidade de autenticação de estilo
Como os aplicativos do lado Blazor do servidor usam páginas de Razor Pages Identity, o estilo da interface do usuário muda quando um visitante navega entre Identity páginas e componentes. Você tem duas opções para lidar com os estilos incongruentes:
- Componentes personalizados Identity
- Utilize um layout personalizado com os estilos da aplicação Blazor
Componentes personalizados Identity
Para usar componentes para Identity em vez de páginas, uma abordagem é criar componentes Identity. Como SignInManager e UserManager não são suportados em componentes Razor, use os endpoints da API da Web na aplicação Blazor para processar ações de conta do usuário.
Usar um layout personalizado com Blazor estilos de aplicação
O Identity layout e os estilos de páginas podem ser modificados para produzir páginas que usam estilos semelhantes ao tema padrão Blazor . Essa abordagem não é coberta pela documentação.
Estruturar Identity numa aplicação no lado do servidor com suporte à autorização
Execute o Identity gerador de esqueleto:
- No Gerenciador de Soluções, clique com o botão direito do mouse no projeto >Adicionar>Novo Item de Andaime.
- No painel esquerdo da caixa de diálogo Adicionar Novo Item de Andaime , selecione Identity. Selecione Identity no painel central. Selecione o botão Adicionar .
- Na caixa de diálogo Adicionar Identity , selecione as opções desejadas.
- Se você tiver uma página de layout personalizada existente para Identity (
_Layout.cshtml), selecione sua página de layout existente para evitar substituir seu layout por marcação incorreta pelo scaffolder. Por exemplo, selecione:-
Pages/Shared/_Layout.cshtmlpara Razor Páginas ou Blazor Server projetos com Razor infraestrutura de Páginas existente. -
Views/Shared/_Layout.cshtmlpara projetos MVC ou Blazor Server projetos com infraestrutura MVC existente.
-
- Para o contexto de dados (classe DbContext):
- Selecione sua classe de contexto de dados. Você deve selecionar pelo menos um arquivo para adicionar seu contexto de dados.
- Para criar um contexto de dados e, possivelmente, criar uma nova classe de usuário para Identity, selecione o + botã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 + botão para Classe de usuário e especifique a classe (por exemplo,ContosoUserpara uma empresa chamada "Contoso").
- Selecione o botão Adicionar para executar o scaffolder.
- Se você tiver uma página de layout personalizada existente para Identity (
Algumas das Identity opções são configuradas em Areas/Identity/IdentityHostingStartup.cs. Para obter mais informações, consulte IHostingStartup.
Aplicações do lado cliente Blazor
Aplicações cliente Blazor usam as suas próprias abordagens Identity de interface do utilizador e não podem utilizar o scaffolding do ASP.NET Core Identity. Os aplicativos ASP.NET Core do lado do servidor de soluções hospedadas Blazor podem seguir as Razor diretrizes do Pages/MVC neste artigo e são configurados como qualquer outro tipo de aplicativo ASP.NET Core que ofereça suporte ao Identity.
A Blazor estrutura não inclui Razor versões de componentes de páginas de interface do Identity usuário. Identity Razor Os componentes da interface do usuário podem ser personalizados ou obtidos de fontes de terceiros sem suporte.
Para obter mais informações, consulte Segurança Blazor e Identity artigos.
Criar fonte de interface do usuário completa Identity
Para manter controlo total da Identity interface, execute o Identity scaffolder e selecione Substituir todos os arquivos.
O código realçado a seguir mostra as alterações para substituir a interface do usuário padrão Identity por Identity em um aplicativo Web ASP.NET Core 2.1. Talvez você queira fazer isso para ter controle total da Identity interface do usuário.
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 padrão Identity é substituído no seguinte código:
services.AddIdentity<IdentityUser, IdentityRole>()
// services.AddDefaultIdentity<IdentityUser>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
O código a seguir define o LoginPath, LogoutPathe AccessDeniedPath):
services.ConfigureApplicationCookie(options =>
{
options.LoginPath = $"/Identity/Account/Login";
options.LogoutPath = $"/Identity/Account/Logout";
options.AccessDeniedPath = $"/Identity/Account/AccessDenied";
});
Registre uma IEmailSender implementação, 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 da palavra-passe
Se PasswordOptions estiverem configurados no Startup.ConfigureServices, pode ser necessário configurar o atributo [StringLength] para a propriedade Password nas páginas geradas automaticamenteIdentity.
InputModel
Password As propriedades são encontradas nos seguintes ficheiros:
Areas/Identity/Pages/Account/Register.cshtml.csAreas/Identity/Pages/Account/ResetPassword.cshtml.cs
Desativar uma página
Esta seção mostra como desativar a página de registro, mas a abordagem pode ser usada para desabilitar qualquer página.
Para desativar o registo de utilizador:
Andaime Identity. Inclua o Account.Register, o Account.Login e a Account.RegisterConfirmation. Por exemplo:
dotnet aspnet-codegenerator identity -dc RPauth.Data.ApplicationDbContext --files "Account.Register;Account.Login;Account.RegisterConfirmation"Atualizar
Areas/Identity/Pages/Account/Register.cshtml.cspara que os utilizadores não possam se registar a partir deste 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 registo 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 do
PageModel:
[AllowAnonymous] public class RegisterConfirmationModel : PageModel { public IActionResult OnGet() { return Page(); } }
Usar 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:
- Uma aplicação Web de administração dedicada.
- 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 única forte é gerada para cada usuário.
- O usuário é adicionado ao Identity banco de dados.
- O usuário é notificado e instruído 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 a adição de 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 evitar a publicação de ativos estáticos Identity na raiz da web, consulte 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