Autorização e Autenticação em C# (.NET): do básico às soluções empresariais
A segurança de aplicações web é um aspecto crítico do desenvolvimento, e no ecossistema C# (.NET) existe um poderoso conjunto de ferramentas para implementar autenticação (verificação da identidade do usuário) e autorização (verificação de permissões de acesso). Neste artigo, abordaremos as principais abordagens: desde o ASP.NET Core Identity integrado até soluções flexíveis baseadas em JWT e OAuth 2.0.
1. ASP.NET Core Identity — sistema integrado de gerenciamento de usuários
ASP.NET Core Identity é um framework completo para registro, login, gerenciamento de funções e senhas. Ele fornece modelos prontos (User, Role), armazenamento (por padrão, Entity Framework + SQL Server) e middleware.
// Registro em Program.csbuilder.Services.AddDbContext<AppDbContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));
builder.Services.AddDefaultIdentity<IdentityUser>(options =>{ options.SignIn.RequireConfirmedAccount = true; options.Password.RequiredLength = 8;}).AddRoles<IdentityRole>().AddEntityFrameworkStores<AppDbContext>();
// Middlewareapp.UseAuthentication();app.UseAuthorization();Exemplo de controlador com proteção:
[Authorize(Roles = "Admin")]public class AdminController : Controller{ public IActionResult Index() => View();}
// Obtendo o usuário atualvar user = await _userManager.GetUserAsync(User);var roles = await _userManager.GetRolesAsync(user);2. JWT (JSON Web Token) — autenticação contínua para APIs e SPAs
JWT é um token compacto e seguro para URL que contém claims (declarações) sobre o usuário. É ideal para REST APIs, aplicativos móveis e Single Page Applications (React, Angular, Vue).
Instalação do pacote:
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearerConfiguração em Program.cs:
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidIssuer = "https://pythonlib.ru", ValidateAudience = true, ValidAudience = "https://api.pythonlib.ru", ValidateLifetime = true, IssuerSigningKey = new SymmetricSecurityKey( Encoding.UTF8.GetBytes("SuperSecretKey123!SuperSecretKey123!")), ClockSkew = TimeSpan.Zero }; });Geração do token (por exemplo, no controlador de login):
var claims = new List<Claim>{ new Claim(ClaimTypes.Name, user.UserName), new Claim(ClaimTypes.Role, "User"), new Claim("custom_claim", "value")};
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("SuperSecretKey123!"));var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var token = new JwtSecurityToken( issuer: "https://pythonlib.ru", audience: "https://api.pythonlib.ru", claims: claims, expires: DateTime.Now.AddHours(2), signingCredentials: creds);
return Ok(new { token = new JwtSecurityTokenHandler().WriteToken(token) });Protegendo o endpoint:
[Authorize][HttpGet("profile")]public IActionResult GetProfile(){ var userId = User.FindFirst(ClaimTypes.NameIdentifier)?.Value; return Ok(new { Message = "Acesso permitido", UserId = userId });}3. Autenticação por Cookie — clássica para aplicações MVC
Para aplicações server-side tradicionais (Razor Pages, MVC), é conveniente usar autenticação por cookie. O usuário recebe um cookie criptografado que é automatic
Também na biblioteca
Filas de tarefas em TypeScript: visão geral de bibliotecas e implementação
Processamento JSON em Java: bibliotecas e ferramentas para trabalhar com JSON
Rate Limiting em Kotlin: bibliotecas e exemplos práticos
Cliente HTTP para Kotlin: Principais bibliotecas para trabalhar com rede
Monitoramento Node.js: ferramentas e bibliotecas para observability