Introdução ao OAuth 2.0 e JWT em C#
Aplicações web modernas e APIs exigem um sistema de autorização robusto. Dois dos padrões mais populares — OAuth 2.0 (protocolo de delegação de acesso) e JWT (JSON Web Token, formato de token) — tornaram-se a base da segurança no ecossistema .NET. Neste artigo, vamos analisar como implementar autorização OAuth 2.0 e JWT em C# no ASP.NET Core, criar um exemplo de servidor de autorização e proteger uma API.
Independentemente de você estar criando uma aplicação monolítica ou uma arquitetura de microsserviços, compreender esses mecanismos é criticamente importante. O OAuth 2.0 define papéis (cliente, servidor de autorização, servidor de recursos), enquanto o JWT serve como uma forma compacta e autossuficiente de transmitir dados do usuário.
Fundamentos do OAuth 2.0: fluxos e papéis
O que é OAuth 2.0?
OAuth 2.0 é um protocolo de autorização que permite que aplicações de terceiros obtenham acesso limitado aos recursos do usuário sem transmitir suas credenciais. Em vez de login e senha, são usados tokens de acesso (access tokens).
Papéis principais no OAuth 2.0
- Resource Owner — o usuário proprietário dos dados.
- Client — a aplicação que solicita o acesso.
- Authorization Server — o servidor que emite os tokens após a autenticação.
- Resource Server — a API que protege os recursos e verifica os tokens.
Fluxos populares (grant types)
- Authorization Code — para aplicações server-side (o mais seguro).
- Client Credentials — para comunicação entre servidores (sem usuário).
- Implicit — obsoleto, não recomendado.
- Refresh Token — para obter um novo access token sem reinserir a senha.
JWT (JSON Web Token): estrutura e princípio de funcionamento
Do que é composto o JWT?
JWT é uma string composta por três partes, separadas por pontos:
header.payload.signature- Header — tipo do token e algoritmo de assinatura (ex.: HS256 ou RS256).
- Payload — dados (claims): identificador do usuário, papéis, prazo de validade, etc.
- Signature — assinatura que verifica se o token não foi alterado.
Vantagens do JWT para C#
- Autossuficiência — todos os dados do usuário estão dentro do token.
- Verificação fácil no lado do servidor de recursos sem consultar o banco de dados.
- Suporte no .NET através da biblioteca
Microsoft.AspNetCore.Authentication.JwtBearer.
Implementação de OAuth 2.0 + JWT em C# no ASP.NET Core
1. Configuração do servidor de autorização (emissão de JWT)
Vamos criar um servidor mínimo que aceita login/senha e retorna um JWT. Para simplificar, usaremos uma chave simétrica (HS256).
// Program.cs — servidor de autorizaçãousing Microsoft.AspNetCore.Authentication.JwtBearer;using Microsoft.IdentityModel.Tokens;using System.IdentityModel.Tokens.Jwt;using System.Security.Claims;using System.Text;
var builder = WebApplication.CreateBuilder(args);builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidIssuer = "MyAuthServer", ValidAudience = "MyApiClient", IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("SuperSecretKey123!@#$%")) }; });
builder.Services.AddAuthorization();var app = builder.Build();
app.MapPost(
```