OAuth 2.0 e autorização JWT em C#: guia passo a passo para iniciantes

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

Introdução ao OAuth 2.0 e JWT em C#

\n

As aplicações web modernas exigem mecanismos de segurança robustos. Dois protocolos-chave — OAuth 2.0 e JWT (JSON Web Token) — tornaram-se o padrão de facto para implementar autorização e autenticação. Neste artigo, vamos explorar como usar essas tecnologias no ecossistema C# (.NET).

\n

OAuth 2.0 é um protocolo de acesso delegado que permite que aplicações obtenham acesso limitado aos recursos do usuário sem transmitir suas credenciais. JWT, por sua vez, é um formato de token compacto e autossuficiente, frequentemente usado para transmitir informações de autenticação entre o cliente e o servidor.

\n

Neste guia, criaremos uma API web simples em ASP.NET Core, implementando OAuth 2.0 com tokens JWT. Você aprenderá como configurar a geração, validação e proteção de endpoints.

\n\n

O que são OAuth 2.0 e JWT?

\n

Antes de ir para o código, vamos entender os conceitos principais.

\n

OAuth 2.0

\n

OAuth 2.0 define quatro papéis:

\n
    \n
  • Resource Owner (proprietário do recurso) — geralmente o usuário.
  • \n
  • Client (cliente) — a aplicação que deseja obter acesso.
  • \n
  • Authorization Server (servidor de autorização) — emite os tokens.
  • \n
  • Resource Server (servidor de recursos) — fornece os dados protegidos.
  • \n
\n

O fluxo principal Authorization Code Grant inclui: redirecionar o usuário para o servidor de autorização, obter um código, trocar o código por um token de acesso.

\n\n

JWT (JSON Web Token)

\n

JWT consiste em três partes separadas por pontos:

\n
    \n
  • Header — tipo do token e algoritmo de assinatura (ex.: HS256).
  • \n
  • Payload — dados (claims), como ID do usuário, função, prazo de validade.
  • \n
  • Signature — assinatura criada com uma chave secreta.
  • \n
\n

Exemplo de JWT: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

\n\n

Configuração do projeto ASP.NET Core

\n

Vamos criar um novo projeto de API web com suporte a autenticação.

\n
dotnet new webapi -n OAuthJwtDemo\ncd OAuthJwtDemo
\n

Adicione os pacotes NuGet necessários:

\n
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer\ndotnet add package System.IdentityModel.Tokens.Jwt
\n\n

Configuração no appsettings.json

\n

Adicione uma seção para as configurações JWT no arquivo appsettings.json:

\n
{\n  "JwtSettings": {\n    "SecretKey": "YOUR_SUPER_SECRET_KEY_AT_LEAST_32_CHARS",\n    "Issuer": "OAuthJwtDemo",\n    "Audience": "OAuthJwtDemoClient",\n    "ExpirationMinutes": 60\n  }\n}
\n

Importante: Em um projeto real, armazene a chave secreta em User Secrets ou Azure Key Vault.

\n\n

Implementação do serviço de geração JWT

\n

Vamos criar uma interface e sua implementação para trabalhar com tokens.

\n

Interface IJwtService

\n
public interface IJwtService\n{\n    string GenerateToken(string userId, string role);\n    ClaimsPrincipal ValidateToken(string token);\n}
\n\n

Implementação JwtService

\n
public class JwtService : IJwtService\n{\n    private readonly JwtSettings _settings;\n\n    public JwtService(IOptions<JwtSettings> settings)\n    {\n        _settings = settings.Value;\n    }\n\n    public string GenerateToken(string userId, string role)\n    {\n        var claims = new[]\n        {\n            new Claim(ClaimTypes.NameIdentifier, userId),\n            new Claim(ClaimTypes.Role, role),\n            new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())\n        };\n\n        var key = new Symmetric                

Blogs

Book Recommendations