Autorização e Autenticação em C# (.NET)
No desenvolvimento web moderno na plataforma .NET, os tópicos de autenticação (verificação da identidade do usuário) e autorização (verificação de permissões de acesso) são fundamentais. As bibliotecas e mecanismos integrados do ASP.NET Core fornecem um conjunto de ferramentas poderoso e flexível para implementar essas tarefas. Neste artigo, abordaremos detalhadamente as principais abordagens, incluindo o uso de JWT (JSON Web Tokens), ASP.NET Core Identity e componentes middleware integrados.
Conceitos Principais
- Autenticação (Authentication) — processo de verificar quem é o usuário (ex.: login + senha).
- Autorização (Authorization) — processo de determinar o que o usuário pode fazer (funções, políticas, claims).
- Identidade baseada em Claims (Claims-based identity) — abordagem onde as informações do usuário são armazenadas como um conjunto de declarações (claims).
ASP.NET Core Identity
ASP.NET Core Identity é um sistema completo de gerenciamento de usuários que inclui registro, login, redefinição de senha, autenticação de dois fatores e gerenciamento de funções. Ele utiliza Entity Framework Core para armazenar dados no banco.
Para conectar o Identity ao projeto, basta adicionar a chamada AddDefaultIdentity e configurar a string de conexão. Exemplo de configuração básica em Program.cs:
using Microsoft.AspNetCore.Identity;using Microsoft.EntityFrameworkCore;using YourApp.Data;
var builder = WebApplication.CreateBuilder(args);
// Adiciona o contexto do banco de dadosbuilder.Services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));
// Adiciona o Identitybuilder.Services.AddDefaultIdentity<IdentityUser>(options => { options.SignIn.RequireConfirmedAccount = false; options.Password.RequireDigit = true; options.Password.RequiredLength = 6;}).AddRoles<IdentityRole>().AddEntityFrameworkStores<ApplicationDbContext>();
builder.Services.AddControllersWithViews();
var app = builder.Build();
app.UseAuthentication();app.UseAuthorization();
app.MapRazorPages();app.Run();Após isso, você terá acesso às páginas padrão de registro e login, bem como métodos para verificar funções:
[Authorize(Roles = "Admin")]public IActionResult AdminPanel(){ return View();}Autenticação JWT (JSON Web Tokens)
JWT é uma forma compacta e autossuficiente de transmitir informações entre partes como um objeto JSON. No .NET, JWT é frequentemente usado para criar APIs REST e aplicações SPA. A biblioteca principal é Microsoft.AspNetCore.Authentication.JwtBearer.
Configuração do JWT em Program.cs:
using Microsoft.AspNetCore.Authentication.JwtBearer;using Microsoft.IdentityModel.Tokens;using System.Text;
var builder = WebApplication.CreateBuilder(args);
var key = Encoding.ASCII.GetBytes("YourSuperSecretKeyThatIsAtLeast32CharactersLong!");
builder.Services.AddAuthentication(options =>{ options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;}).AddJwtBearer(options =>{ options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidIssuer = "yourdomain.com", ValidAudience = "yourdomain.com", IssuerSigningKey = new SymmetricSecurityKey(key) };});
builder.Services.AddAuthorization();builder.Services.AddControllers();
var app = builder.Build();app.UseAuthentication();app.UseAuthorization();app.MapControllers();app.Run();Exemplo
Também na biblioteca
Knex.js para JavaScript (Node.js): guia completo com exemplos práticos
Filas de tarefas para PHP: RabbitMQ, Beanstalkd e Gearman
Cache em PHP: Redis, Memcached e soluções integradas
CryptoKit para Swift: guia completo com exemplos