Configurando ASP.NET Core Identity
ResumoASP.NET Core Identity gerencia usuários, senhas (com hash), roles e claims. Integramos o Identity ao
RepositoryContext, criamos as tabelas via migration e semeamos roles iniciais.
1. Objetivos de Aprendizagem#
- Integrar o Identity ao EF Core e ao
DbContext. - Gerar as tabelas de identidade por migration.
- Semear roles e criar usuários com
UserManager.
2. Pré-requisitos#
- EF Core e migrations (Módulo 17); validação (Módulo 27).
3. Conceito#
Identity fornece UserManager, RoleManager e SignInManager, com armazenamento seguro de senhas (hash + salt via PBKDF2), lockout, requisitos de senha e suporte a roles/claims. O porquê: não reinvente autenticação — Identity resolve os detalhes críticos de segurança que são fáceis de errar.
4. Mão na Massa#
4.1. Setup#
dotnet add Catalog.Api package Microsoft.AspNetCore.Identity.EntityFrameworkCore
4.2. Implementação Passo a Passo#
- Usuário customizado e contexto herdando de
IdentityDbContext:
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
public class ApplicationUser : IdentityUser
{
public string? NomeExibicao { get; set; }
}
public class RepositoryContext : IdentityDbContext<ApplicationUser>
{
public RepositoryContext(DbContextOptions<RepositoryContext> options) : base(options) { }
// DbSets do domínio (Categorias, Produtos) + base.OnModelCreating no override
}
- Registro do Identity:
builder.Services.AddIdentity<ApplicationUser, IdentityRole>(options =>
{
options.Password.RequiredLength = 10;
options.Password.RequireDigit = true;
options.Password.RequireUppercase = true;
options.User.RequireUniqueEmail = true;
options.Lockout.MaxFailedAccessAttempts = 5;
})
.AddEntityFrameworkStores<RepositoryContext>()
.AddDefaultTokenProviders();
- Seed de roles:
modelBuilder.Entity<IdentityRole>().HasData(
new IdentityRole { Name = "Administrator", NormalizedName = "ADMINISTRATOR" },
new IdentityRole { Name = "Manager", NormalizedName = "MANAGER" });
4.3. Executando#
dotnet ef migrations add AddIdentity --project Catalog.Repository --startup-project Catalog.Api
dotnet ef database update --project Catalog.Repository --startup-project Catalog.Api
5. Exemplo Completo#
Criação de usuário via UserManager:
var user = new ApplicationUser { UserName = dto.UserName, Email = dto.Email };
var result = await _userManager.CreateAsync(user, dto.Password);
if (result.Succeeded) await _userManager.AddToRolesAsync(user, dto.Roles);
6. Boas Práticas e Armadilhas#
| Faça | Evite |
|---|---|
| Deixar o Identity fazer o hash de senha | Armazenar senha em texto puro ou hash caseiro |
| Exigir política de senha forte e lockout | Senhas curtas e sem bloqueio por tentativa |
Usar NormalizedName no seed de roles | Seed sem normalização (buscas por role falham) |
Atençãonunca logue senhas, hashes ou tokens (LGPD). O
IdentityResulttraz erros — trate-os e retorne mensagens seguras, sem vazar detalhes internos.
7. Segurança e Produção#
- Política de senha, lockout e e-mail único reduzem superfície de ataque.
- Confirmação de e-mail e 2FA (via
AddDefaultTokenProviders) são recomendados para contas sensíveis.
8. Exercícios#
- Fácil: adicione a role
Viewerao seed. - Médio: exponha
POST /api/authenticationque registra um usuário com validação. - Desafio: habilite confirmação de e-mail antes de permitir login.
9. Resumo#
Integramos o Identity ao EF Core, geramos as tabelas e semeamos roles, com política de senha forte e lockout. O UserManager cria usuários com hashing seguro.
10. Próximos Passos#
A seguir, emitimos e validamos tokens JWT para autenticar requisições.
11. Referências#
- Microsoft Learn — Introdução ao Identity no ASP.NET Core
- Microsoft Learn — Configurar Identity
- Microsoft Learn — UserManager