Guia Completo de Identity Framework para .NET Core

Autenticação🔑 Autenticação JWT: Proteja sua API com Tokens!🔑 Autenticação JWT: Proteja sua API com Tokens!Descubra como implementar autenticação JWT no ASP.NET Core com exemplos práticos, boas práticas de segurança e dicas para proteger suas APIs de forma eficiente. é como o porteiro de uma boate exclusiva: só entra quem tem o convite certo, no formato certo e📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. no momento certo. Fazer isso manualmente? Pode virar um pesadelo de segurança🛡️ Segurança em SignalR: Autenticação e Autorização!🛡️ Segurança em SignalR: Autenticação e Autorização!Descubra como implementar JWT e autorização com roles e claims no SignalR, garantindo segurança e controle de acessos em tempo real. e complexidade. É aí que o Identity Framework entra em cena: seu segurança particular para aplicações .NET📊 Monitoramento com Prometheus: Métricas em Tempo Real!📊 Monitoramento com Prometheus: Métricas em Tempo Real!Descubra como implementar o Prometheus para monitoramento em sistemas .NET, com métricas em tempo real e dashboards inteligentes., pronto para produção!

📌 Conteúdo🔗

🧠 O que é o Identity Framework?🔗

O Identity Framework é um conjunto de bibliotecas que adiciona autenticação🔑 Autenticação JWT: Proteja sua API com Tokens!🔑 Autenticação JWT: Proteja sua API com Tokens!Descubra como implementar autenticação JWT no ASP.NET Core com exemplos práticos, boas práticas de segurança e dicas para proteger suas APIs de forma eficiente. e gerenciamento de usuários de forma integrada ao ASP.NET Core🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real.. Ele oferece, por padrão:

Na prática, é como ter um “guarda-costas digital” já treinado, pronto para proteger suas rotas, checar permissões e cuidar de todo o fluxo de autenticação🔑 Autenticação JWT: Proteja sua API com Tokens!🔑 Autenticação JWT: Proteja sua API com Tokens!Descubra como implementar autenticação JWT no ASP.NET Core com exemplos práticos, boas práticas de segurança e dicas para proteger suas APIs de forma eficiente..

Por que usar?

⚙️ Configuração Inicial🔗

Para começar, você só precisa ter um projeto ASP.NET Core🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real.. A maior parte da configuração é feita no arquivo Program.cs (ou Startup.cs, dependendo da versão do .NET).

1. Adicionar📦 List<T>: Dinamismo além dos Arrays!📦 List<T>: Dinamismo além dos Arrays!Descubra como utilizar List<T> em C# de forma eficiente. Aprenda a criar, manipular e otimizar listas para diferentes cenários com exemplos práticos. pacote

Se o seu projeto🤝 GitHub Básico: Versionamento para Iniciantes!🤝 GitHub Básico: Versionamento para Iniciantes!Descubra como o GitHub facilita colaboração, versionamento e organização de código com este tutorial prático e essencial para desenvolvedores iniciantes. não tiver o Identity, você pode instalar:

dotnet add package Microsoft.AspNetCore.Identity.EntityFrameworkCore

2. Configurar no service container🐳 Docker 101: Containerize sua API em 15 Minutos!🐳 Docker 101: Containerize sua API em 15 Minutos!Containerize sua API .NET em 15 minutos com Docker. Este tutorial prático ensina a construir e rodar containers de forma simples e eficiente.

Tenha um contexto de banco de dados🗂️ Entity Framework Core: ORM que Faz Mágica com seu Banco!🗂️ Entity Framework Core: ORM que Faz Mágica com seu Banco!Aprenda a dominar o EF Core e simplifique suas operações de banco de dados com LINQ, migrações e mapeamentos automáticos, sem precisar escrever SQL. com Entity Framework Core. Depois, adicione o Identity:

builder.Services.AddDbContext<ApplicationDbContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));
builder.Services.AddIdentity<IdentityUser, IdentityRole>()
    .AddEntityFrameworkStores<ApplicationDbContext>()
    .AddDefaultTokenProviders();

3. Configurar o middleware🔒 Middleware: Intercepte Requests como um Vigilante!🔒 Middleware: Intercepte Requests como um Vigilante!Descubra como usar middlewares no ASP.NET Core para monitorar, validar e controlar o fluxo de requisições de forma segura e eficiente em seu projeto.

No pipeline📊 Pipelines: Pré-processe Dados como um Cientista!📊 Pipelines: Pré-processe Dados como um Cientista!Aprenda a criar pipelines eficientes com ML.NET, automatizando o pré-processamento de dados e garantindo modelos de Machine Learning precisos e reprodutíveis. de execução (geralmente ao final do Program.cs), você coloca:

var app = builder.Build();
// ...
app.UseAuthentication();
app.UseAuthorization();
app.MapControllers();
app.Run();

Pronto! Sua aplicação já tem a base para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! gerenciamento de usuários.

🎨 Personalização de Usuários🔗

Para adicionar📦 List<T>: Dinamismo além dos Arrays!📦 List<T>: Dinamismo além dos Arrays!Descubra como utilizar List<T> em C# de forma eficiente. Aprenda a criar, manipular e otimizar listas para diferentes cenários com exemplos práticos. campos como DataNascimento ou CPF:

1. Crie uma classe🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara. que herda de IdentityUser:

public class ApplicationUser : IdentityUser
{
    public DateTime DataNascimento { get; set; }
    public string CPF { get; set; }
}

2. Atualize o contexto:

public class AppDbContext : IdentityDbContext<ApplicationUser>
{
    // ...
}

3. Gere nova migração🔄 Migrations: Evolua seu Banco sem Perder Dados!🔄 Migrations: Evolua seu Banco sem Perder Dados!Aprenda como aplicar migrations com segurança usando Entity Framework Core para evoluir seu banco de dados sem perder dados.:

dotnet ef migrations add "AddCustomUserFields"

Dica para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! Product Managers: Campos customizados permitem coletar dados🎮 Projeto: Crawler de Web Assíncrono com C#!🎮 Projeto: Crawler de Web Assíncrono com C#!Aprenda a criar um crawler assíncrono em C# e otimize o SEO do seu site, processando múltiplas páginas simultaneamente com alta performance. específicos do seu negócio sem quebrar a segurança existente.

🍪 Autenticação com Cookies e Tokens🔗

Cookie-Based (Web Apps)

Já vem configurado por padrão. Para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! ajustar tempo de expiração:

services.ConfigureApplicationCookie(options =>
{
    options.ExpireTimeSpan = TimeSpan.FromDays(7);
    options.SlidingExpiration = true;
});

JWT (APIs)

Configure no Program.cs:

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    {
        options.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuer = true,
            ValidIssuer = "sua_empresa",
            ValidateAudience = true,
            ValidAudience = "sua_api",
            IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("SUA_CHAVE_SECRETA_MUITO_LONGA_AQUI"))
        };
    });

Comparação:

🔑 Autorização Baseada em Roles🔗

1. Crie uma role🛡️ Segurança em SignalR: Autenticação e Autorização!🛡️ Segurança em SignalR: Autenticação e Autorização!Descubra como implementar JWT e autorização com roles e claims no SignalR, garantindo segurança e controle de acessos em tempo real. "Admin":

var roleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();
if (!await roleManager.RoleExistsAsync("Admin"))
{
    await roleManager.CreateAsync(new IdentityRole("Admin"));
}

2. Atribua a role🛡️ Segurança em SignalR: Autenticação e Autorização!🛡️ Segurança em SignalR: Autenticação e Autorização!Descubra como implementar JWT e autorização com roles e claims no SignalR, garantindo segurança e controle de acessos em tempo real. a um usuário:

var userManager = serviceProvider.GetRequiredService<UserManager<ApplicationUser>>();
var user = await userManager.FindByEmailAsync("[email protected]");
await userManager.AddToRoleAsync(user, "Admin"));
}

3. Proteja um endpoint📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos.:

[Authorize(Roles = "Admin")]
[HttpGet("relatorios")]
public IActionResult GetRelatorios() { ... }

Para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! Scrum Masters: Roles🛡️ Segurança em SignalR: Autenticação e Autorização!🛡️ Segurança em SignalR: Autenticação e Autorização!Descubra como implementar JWT e autorização com roles e claims no SignalR, garantindo segurança e controle de acessos em tempo real. ajudam a traduzir regras de negócio (ex: "Apenas gerentes podem aprovar pedidos") em permissões técnicas.

🌐 Integração com Provedores Externos🔗

Exemplo com Google:

1. Registre sua app no Google Cloud Console

2. Adicione no Program.cs:

services.AddAuthentication()
    .AddGoogle(options =>
    {
        options.ClientId = "SEU_CLIENT_ID";
        options.ClientSecret = "SEU_CLIENT_SECRET";
    });

3. Na view de login🎲 Desafio: Crie um Sistema de Login com Tratamento de Erros Robusto!🎲 Desafio: Crie um Sistema de Login com Tratamento de Erros Robusto!Aprenda a criar um sistema de login robusto em C#, com tratamento de erros adequado, validação e segurança para evitar vulnerabilidades.:

```
**Fluxo**: Usuário clica → Redireciona para Google → Retorna com token → Identity cria conta local automaticamente.
## 🛡️ Segurança Avançada
### 2FA (Autenticação em Dois Fatores)
Habilite no `Program.cs`:

services🚀 Kubernetes: Orquestração de Microservices na Nuvem!🚀 Kubernetes: Orquestração de Microservices na Nuvem!Descubra como Kubernetes revoluciona o gerenciamento de microsserviços na nuvem, garantindo escalabilidade, automação e alta disponibilidade..AddIdentity<ApplicationUser, IdentityRole>(options =>

{

options.SignIn.RequireConfirmedAccount = true;

options.Tokens.AuthenticatorTokenProvider = TokenOptions.DefaultAuthenticatorProvider;

}) .AddDefaultTokenProviders();
**Tipos de 2FA suportados**:

## 🏭 Boas Práticas para Produção
1. **Sempre use HTTPS**:

services🚀 Kubernetes: Orquestração de Microservices na Nuvem!🚀 Kubernetes: Orquestração de Microservices na Nuvem!Descubra como Kubernetes revoluciona o gerenciamento de microsserviços na nuvem, garantindo escalabilidade, automação e alta disponibilidade..Configure<CookiePolicyOptions>(options =>

{

options.Secure = CookieSecurePolicy.Always;

});
2. **Política de Senhas Fortes**:

services🚀 Kubernetes: Orquestração de Microservices na Nuvem!🚀 Kubernetes: Orquestração de Microservices na Nuvem!Descubra como Kubernetes revoluciona o gerenciamento de microsserviços na nuvem, garantindo escalabilidade, automação e alta disponibilidade..Configure<IdentityOptions>(options =>

{

options.Password.RequireDigit = true;

options.Password.RequiredLength = 12;

options.Password.RequireNonAlphanumeric = true;

});
3. **Monitore tentativas falhas**:

options.Lockout.MaxFailedAccessAttempts = 5;

options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(15);

## 🚚 Migração de Aplicações Legadas
**Do .NET Framework 4.x para .NET 8**:
1. **Identity vs. Membership**:
  • Membership (legado): `System.Web.Security`
  • Identity: Mais flexível, suporta OAuth moderno
2. Passos: **Dica**: Use a ferramenta `Microsoft.AspNet.Identity.CoreCompat` para migrar hashes de senha antigos. ## 🌍 Cenários Reais ### 1. E-commerce com Múltiplos Roles
[Authorize(Roles = "Vendedor,Admin")] [HttpPut("produtos/{id}")]

public IActionResult AtualizarProduto(int id, Produto produto🔢 Operadores Aritméticos: Faça Cálculos como uma Calculadora Humana!🔢 Operadores Aritméticos: Faça Cálculos como uma Calculadora Humana!Aprenda a dominar operadores aritméticos em C# com exemplos práticos, técnicas de cálculo e dicas para evitar erros e maximizar resultados.) { ... }

### 2. Portal Interno com Autenticação Social

services🚀 Kubernetes: Orquestração de Microservices na Nuvem!🚀 Kubernetes: Orquestração de Microservices na Nuvem!Descubra como Kubernetes revoluciona o gerenciamento de microsserviços na nuvem, garantindo escalabilidade, automação e alta disponibilidade..AddAuthentication()

.AddMicrosoftAccount(options => { /* ... */ }) .AddGitHub(options => { /* ... */ });
## 🏁 Conclusão
O Identity Framework é como um **kit de sobrevivência** para autenticação: resolve 80% dos casos com configuração simples, mas permite personalização profunda quando necessário. Dominá-lo significa:
✔️ Evitar reinventar a roda (e cometer erros de segurança)
✔️ Entregar features mais rápido
✔️ Manter-se compatível com padrões modernos
**Desafio Prático**: Crie um sistema onde:
Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.

Referências🔗

Compartilhar artigo