Autorização e Autenticação em C# (.NET): Guia Completo

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Autorização e Autenticação em C# (.NET): Guia Completo



A segurança de aplicações web é a pedra angular do desenvolvimento moderno. No ecossistema C# (.NET), os mecanismos integrados de autenticação e autorização permitem proteger sua aplicação de forma flexível e confiável. Neste artigo, abordaremos os conceitos-chave, ferramentas e exemplos de código para trabalhar com Identity, JWT e modelo de funções.



1. Conceitos Básicos

Antes de passarmos ao código, é importante diferenciar dois termos:

  • Autenticação — processo de verificação da identidade do usuário (quem é você?). Geralmente é feita através de login/senha, tokens ou provedores externos.
  • Autorização — processo de definição de direitos de acesso (o que você pode fazer?). É implementada através de funções, políticas ou claims.


2. ASP.NET Core Identity — Solução Integrada

Microsoft.AspNetCore.Identity é um sistema completo de gerenciamento de usuários que inclui registro, login, redefinição de senha, autenticação de dois fatores e muito mais. Ele funciona com Entity Framework Core e suporta qualquer armazenamento de dados.



Instalação:

dotnet add package Microsoft.AspNetCore.Identity.EntityFrameworkCoredotnet add package Microsoft.EntityFrameworkCore.SqlServer


Exemplo de registro de usuário (controller Account):

public class AccountController : Controller{    private readonly UserManager<IdentityUser> _userManager;    private readonly SignInManager<IdentityUser> _signInManager;

public AccountController(UserManager<IdentityUser> userManager, SignInManager<IdentityUser> signInManager) { _userManager = userManager; _signInManager = signInManager; }

[HttpPost] public async Task<IActionResult> Register(RegisterViewModel model) { if (ModelState.IsValid) { var user = new IdentityUser { UserName = model.Email, Email = model.Email }; var result = await _userManager.CreateAsync(user, model.Password); if (result.Succeeded) { await _signInManager.SignInAsync(user, isPersistent: false); return RedirectToAction("Index", "Home"); } foreach (var error in result.Errors) ModelState.AddModelError(string.Empty, error.Description); } return View(model); }}


3. JWT (JSON Web Tokens) — Autenticação sem Estado

Para SPAs modernos (React, Angular) ou aplicativos móveis, o JWT é frequentemente utilizado. O token é assinado pelo servidor e contém claims (declarações) sobre o usuário. O servidor não armazena sessões, o que simplifica a escalabilidade.



Configuração em Program.cs:

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)    .AddJwtBearer(options =>    {        options.TokenValidationParameters = new TokenValidationParameters        {            ValidateIssuer = true,            ValidIssuer = builder.Configuration["Jwt:Issuer"],            ValidateAudience = true,            ValidAudience = builder.Configuration["Jwt:Audience"],            ValidateLifetime = true,            IssuerSigningKey = new SymmetricSecurityKey(                Encoding.UTF8.GetBytes(builder.Configuration["Jwt:Key"]))        };    });


Geração do token:

public string GenerateToken(IdentityUser user){    var claims = new[]    {        new Claim(ClaimTypes.NameIdentifier, user.Id),        new Claim(ClaimTypes.Email, user.Email),        new Claim(ClaimTypes.Role, "User")    };

var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["Jwt:Key"])); var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

va

Recommendations