Exercício – configurar o Suporte de Identidade
A Identidade está pronta a utilizar sem qualquer personalização. Nesta unidade, a Identidade é adicionada a um projeto existente ASP.NET Core Razor Pages.
Obter e abrir o projeto inicial
Nota
Se quiser utilizar o .devcontainer no GitHub Codespaces, navegue para os seus codespaces para o repositório MicrosoftDocs/mslearn-secure-aspnet-core-identity . Crie um novo espaço de código com o main
ramo e, em seguida, avance para o passo 3.
Numa janela de terminal, execute o seguinte comando para obter o projeto inicial:
git clone https://github.com/MicrosoftDocs/mslearn-secure-aspnet-core-identity
Mude para o diretório de código fonte e inicie o Visual Studio Code:
cd mslearn-secure-aspnet-core-identity code .
O Visual Studio Code é aberto. Aceite quaisquer pedidos para instalar extensões recomendadas ou selecione Reabrir no Contentor se pretender utilizar o .devcontainer.
Dica
Se perder o pedido para reabrir no contentor, prima Ctrl+Shift+P para abrir a paleta de comandos e, em seguida, procure e selecione Contentores de Programador: Reabrir no Contentor.
Depois de o projeto ser carregado (localmente ou no contentor), prima Ctrl+Shift+` para abrir um novo painel de terminal.
No novo painel de terminal, defina a sua localização para o diretório RazorPagesPizza :
cd RazorPagesPizza
No painel Explorador , expanda o diretório RazorPagesPizza para ver o código. RazorPagesPizza é o diretório do projeto. À medida que avança, suponha que todos os caminhos abordados neste módulo são relativos a esta localização.
Explorar a aplicação
Vamos executar a aplicação para obter uma introdução rápida.
No painel de terminal, crie o projeto e execute a aplicação:
dotnet run
Repare no URL apresentado na saída do terminal. Por exemplo,
https://localhost:7192
.Abra a aplicação no browser ao selecionar o URL com Ctrl+clique.
Importante
Se estiver a utilizar o .devcontainer no Docker, o certificado SSL do interior do contentor não será considerado fidedigno pelo browser. Para ver a aplicação Web, tem de efetuar um dos seguintes procedimentos:
- Ignore o erro de certificado. Se utilizar o Microsoft Edge, selecione Avançadas e Continuar para localhost (não recomendado). Os detalhes variam consoante o browser.
- Guarde o certificado e adicione-o às autoridades de certificação fidedignas.
- Importe um certificado de desenvolvimento existente dentro do contentor. Para obter mais informações, veja os comentários gerados em ./devcontainer/devcontainter.json.
Se optar por importar um certificado de desenvolvimento existente dentro do contentor, o caminho do contentor /root/.aspnet/ é exposto como .devcontainer/persisted-data/.aspnet fora do contentor. Isto é para sua comodidade.
Se estiver a utilizar o .devcontainer no GitHub Codespaces, não é necessária nenhuma ação. O Codespaces processa automaticamente a ligação SSL do proxy.
Explore a aplicação Web no browser. Utilizar as ligações no cabeçalho:
- Navegar para a Lista de Pizzas
- Navegar de volta para Casa
Repare que não é necessário autenticar.
Prima Ctrl+C no painel de terminal para parar a aplicação.
Adicionar ASP.NET Core Identidade ao projeto
A implementação de Identidade predefinida pode ser adicionada com dotnet
ferramentas de linha de comandos.
Instale o estruturador de código ASP.NET Core:
dotnet tool install dotnet-aspnet-codegenerator --version 6.0.2 --global
O estruturador é uma ferramenta .NET Core que:
- É utilizado para adicionar os componentes de Identidade predefinidos ao projeto.
- Ativa a personalização de componentes da IU de Identidade na próxima unidade.
- É invocado através
dotnet aspnet-codegenerator
deste módulo.
Adicione os seguintes pacotes NuGet ao projeto:
dotnet add package Microsoft.VisualStudio.Web.CodeGeneration.Design --version 6.0.2 dotnet add package Microsoft.AspNetCore.Identity.EntityFrameworkCore --version 6.0.3 dotnet add package Microsoft.AspNetCore.Identity.UI --version 6.0.3 dotnet add package Microsoft.EntityFrameworkCore.Design --version 6.0.3 dotnet add package Microsoft.EntityFrameworkCore.SqlServer --version 6.0.3
Os pacotes instalam dependências e modelos de geração de código que são utilizados pelo estruturador.
Dica
Para ver os geradores disponíveis:
- Na shell de comandos, execute
dotnet aspnet-codegenerator -h
. - No Visual Studio, clique com o botão direito do rato no projeto em Solution Explorer (Explorador de Soluções) e selecione Add (Adicionar) >New Scaffolded Item (Novo Item Estruturado).
- Na shell de comandos, execute
Utilize o estruturador para adicionar os componentes de Identidade predefinidos ao projeto. Execute o seguinte comando no terminal:
dotnet aspnet-codegenerator identity --useDefaultUI --dbContext RazorPagesPizzaAuth
No comando anterior:
- O gerador identificado como
identity
é utilizado para adicionar a arquitetura de Identidade ao projeto. - A
--useDefaultUI
opção indica que é utilizada uma biblioteca de classes do Razor (RCL) que contém os elementos de IU predefinidos. O bootstrap é utilizado para modelar os componentes. - A
--dbContext
opção especifica o nome de uma classe de contexto de base de dados EF Core a gerar.
A seguinte Areas estrutura de diretório é apresentada no diretório RazorPagesPizza :
- Areas
- Identity (é apresentado na mesma linha que Áreas)
- Data
- RazorPagesPizzaAuth.cs
- Pages
- _ValidationScriptsPartial.cshtml
- _ViewStart.cshtml
- Data
- Identity (é apresentado na mesma linha que Áreas)
Dica
Se o Areas diretório não aparecer automaticamente no painel Explorador, selecione o botão Atualizar Explorador no cabeçalho MSLEARN-SECURE-ASPNET-CORE-IDENTITY no painel Explorador .
As áreas fornecem uma forma de criar partições de uma aplicação Web ASP.NET Core em grupos funcionais mais pequenos.
O estruturador também fez as seguintes alterações realçadas em Program.cs, reformatados para legibilidade:
using Microsoft.AspNetCore.Identity; using Microsoft.EntityFrameworkCore; using RazorPagesPizza.Areas.Identity.Data; var builder = WebApplication.CreateBuilder(args); var connectionString = builder.Configuration.GetConnectionString("RazorPagesPizzaAuthConnection"); builder.Services.AddDbContext<RazorPagesPizzaAuth>(options => options.UseSqlServer(connectionString)); builder.Services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true) .AddEntityFrameworkStores<RazorPagesPizzaAuth>(); // Add services to the container. builder.Services.AddRazorPages(); var app = builder.Build(); // Configure the HTTP request pipeline. if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthentication(); app.UseAuthorization(); app.MapRazorPages(); app.Run();
No código anterior:
- A
RazorPagesPizzaAuthConnection
cadeia de ligação é lida a partir de appsettings.json. - A classe de contexto da base de dados EF Core, denominada
RazorPagesPizzaAuth
, está configurada com a cadeia de ligação. - Os serviços de Identidade são registados, incluindo a IU predefinida, fornecedores de tokens e autenticação baseada em cookies.
.AddDefaultIdentity<IdentityUser>
indica aos Serviços de identidade para utilizarem o modelo de utilizador predefinido.- A expressão
options => options.SignIn.RequireConfirmedAccount = true
lambda especifica que os utilizadores têm de confirmar as respetivas contas de e-mail. .AddEntityFrameworkStores<RazorPagesPizzaAuth>()
especifica que a Identidade utiliza o arquivo Entity Framework Core predefinido para a respetiva base de dados. ARazorPagesPizzaAuth
DbContext
classe é utilizada.
app.UseAuthentication();
ativa as capacidades de autenticação. Mais especificamente, uma instância do middleware de autenticação do ASP.NET Core é adicionada ao pipeline de processamento de pedidos HTTP da aplicação.
- O gerador identificado como
Configurar a ligação à base de dados
A ConnectionStrings
secção em appsettings.json deve ter um aspeto semelhante ao seguinte JSON:
"ConnectionStrings": {
"RazorPagesPizzaAuthConnection": "Server=(localdb)\\mssqllocaldb;Database=RazorPagesPizza;Trusted_Connection=True;MultipleActiveResultSets=true"
}
Esta cadeia de ligação aponta para uma instância do SQL Server Express LocalDB por predefinição. Se estiver a utilizar o .devcontainer, tem de alterar a cadeia de ligação da seguinte forma! Guarde as alterações.
"ConnectionStrings": {
"RazorPagesPizzaAuthConnection": "Data Source=localhost;Initial Catalog=RazorPagesPizza;Integrated Security=False;User Id=sa;Password=P@ssw0rd;MultipleActiveResultSets=True"
}
Esta ação atualiza a cadeia de ligação para ligar à instância de SQL Server dentro do contentor.
Atualizar a base de dados
Agora que já verificou a cadeia de ligação, pode gerar e executar uma migração para criar a base de dados.
Execute o seguinte comando para criar a aplicação:
dotnet build
A compilação tem êxito sem avisos. Se a compilação falhar, verifique o resultado para obter informações para resolução de problemas.
Instale a ferramenta de migração Entity Framework Core:
dotnet tool install dotnet-ef --version 6.0.3 --global
A ferramenta de migração é uma ferramenta .NET que:
- Gera código denominado migração para criar e atualizar a base de dados que suporta o modelo de entidade Identidade.
- Executa migrações numa base de dados existente.
- É invocado através
dotnet ef
deste módulo.
Crie e execute uma migração EF Core para atualizar a base de dados:
dotnet ef migrations add CreateIdentitySchema dotnet ef database update
A migração EF Core
CreateIdentitySchema
aplicou um script de alterações de linguagem DDL (Data Definition Language) para criar as tabelas de suporte à Identidade. Por exemplo, o seguinte resultado ilustra umaCREATE TABLE
instrução gerada pela migração:info: Microsoft.EntityFrameworkCore.Database.Command[20101] Executed DbCommand (98ms) [Parameters=[], CommandType='Text', CommandTimeout='30'] CREATE TABLE [AspNetUsers] ( [Id] nvarchar(450) NOT NULL, [UserName] nvarchar(256) NULL, [NormalizedUserName] nvarchar(256) NULL, [Email] nvarchar(256) NULL, [NormalizedEmail] nvarchar(256) NULL, [EmailConfirmed] bit NOT NULL, [PasswordHash] nvarchar(max) NULL, [SecurityStamp] nvarchar(max) NULL, [ConcurrencyStamp] nvarchar(max) NULL, [PhoneNumber] nvarchar(max) NULL, [PhoneNumberConfirmed] bit NOT NULL, [TwoFactorEnabled] bit NOT NULL, [LockoutEnd] datetimeoffset NULL, [LockoutEnabled] bit NOT NULL, [AccessFailedCount] int NOT NULL, CONSTRAINT [PK_AspNetUsers] PRIMARY KEY ([Id]) );
Dica
ef
O comando deu um erro sobre o LocalDb não ser suportado? Certifique-se de que definiu a cadeia de ligação, conforme descrito na secção "Configurar a ligação da base de dados"!A extensão SQL Server foi adicionada ao Visual Studio Code, se necessário, quando aceitou as extensões recomendadas. Prima Ctrl+Alt+D para mudar para o painel SQL Server.
Expanda os nós sob a ligação de base de dados existente. Expanda o nó Bases de Dados , o nó RazorPagesPizza e, por fim, o nó Tabelas . Anote a lista de tabelas. Isto confirma que a migração foi esclarada com êxito.
Nota
A imagem anterior mostra um exemplo com SQL Server Express LocalDB. Ao utilizar o .devcontainer, a ligação é denominada mssql-container.
Adicionar as ligações de início de sessão e registo
Navegue de volta para o painel Explorador . Em Pages/Shared/_Layout.cshtml, substitua o comentário @* Add the _LoginPartial partial view *@
pelo seguinte.
<partial name="_LoginPartial" />
A markup anterior compõe a vista parcial _LoginPartial
no cabeçalho de páginas que utilizem o esquema predefinido. _LoginPartial
foi adicionado pela estrutura de Identidade. Esta vista parcial confere ao utilizador ligações para Iniciar sessão e Registar se o utilizador não tiver sessão iniciada.
Testar a funcionalidade Identidade
É tudo o que é necessário para adicionar a implementação de Identidade predefinida. Está na hora de testá-lo!
Certifique-se de que guardou todas as suas alterações.
No painel de terminal, crie o projeto e execute a aplicação:
dotnet run
Navegue para a aplicação no seu browser como anteriormente.
Selecione a ligação Registar no cabeçalho da aplicação. Preencha o formulário para criar uma nova conta.
A página Registar confirmação é apresentada. Uma vez que a aplicação ainda não foi configurada para enviar e-mails de confirmação, a ligação de confirmação é fornecida nesta página.
Selecione a ligação de confirmação. É apresentada uma mensagem de confirmação.
Selecione a ligação Iniciar sessão no cabeçalho da aplicação e inicie sessão.
Após um início de sessão bem-sucedido:
- Será redirecionado para a home page.
- O cabeçalho da aplicação apresenta Hello [endereço de e-mail]! e uma ligação Terminar sessão .
- Um cookie com o nome .AspNetCore.Identity.Application é criado. A identidade preserva sessões de utilizadores com autenticação baseada em cookies.
Selecione a ligação Terminar sessão no cabeçalho da aplicação.
Após terminar sessão com êxito, o cookie .AspNetCore.Identity.Application é eliminado para terminar a sessão do utilizador.
Prima Ctrl+C no painel de terminal para parar a aplicação.
Resumo
Nesta unidade, adicionou a implementação de Identidade predefinida a uma aplicação Web existente. Na próxima unidade, irá aprender a expandir e personalizar a Identidade.