Pular para o conteúdo
.NETConfigurando ASP.NET Core Identity
Módulo 06APIs em Produção

Configurando ASP.NET Core Identity

avancado 40 min de leitura·Atualizado · .NET 9
Resumo

ASP.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#

Shell
dotnet add Catalog.Api package Microsoft.AspNetCore.Identity.EntityFrameworkCore

4.2. Implementação Passo a Passo#

  1. Usuário customizado e contexto herdando de IdentityDbContext:
C#
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
}
  1. Registro do Identity:
C#
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();
  1. Seed de roles:
C#
modelBuilder.Entity<IdentityRole>().HasData(
    new IdentityRole { Name = "Administrator", NormalizedName = "ADMINISTRATOR" },
    new IdentityRole { Name = "Manager", NormalizedName = "MANAGER" });

4.3. Executando#

Shell
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:

C#
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çaEvite
Deixar o Identity fazer o hash de senhaArmazenar senha em texto puro ou hash caseiro
Exigir política de senha forte e lockoutSenhas curtas e sem bloqueio por tentativa
Usar NormalizedName no seed de rolesSeed sem normalização (buscas por role falham)
Atenção

nunca logue senhas, hashes ou tokens (LGPD). O IdentityResult traz 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 Viewer ao seed.
  • Médio: exponha POST /api/authentication que 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#

40-01 — Configurando ASP.NET Core Identity | Curso ASP.NET Core