Introdução: por que OAuth 2.0 e JWT são necessários em aplicações modernas?
\nNo desenvolvimento web moderno, a segurança de dados e o gerenciamento de acesso estão em primeiro plano. Todos os dias, milhões de usuários acessam aplicações através do Google, Facebook ou sistemas corporativos, sem transmitir suas senhas diretamente. É aqui que entram em cena os protocolos OAuth 2.0 e a tecnologia JWT (JSON Web Tokens).
\nOAuth 2.0 é o padrão da indústria para delegação de acesso. Ele permite que aplicações obtenham acesso limitado aos recursos do usuário sem revelar suas credenciais. JWT, por sua vez, é um formato de token compacto e autossuficiente que contém todas as informações necessárias para verificação de autenticação e autorização.
\nNeste artigo, vamos analisar na prática como implementar autorização OAuth 2.0 e JWT em C# usando ASP.NET Core. Você aprenderá como configurar um servidor de autorização, gerar tokens e proteger seus endpoints de API. Todos os exemplos de código estão prontos para uso em projetos reais.
\n\n1. Configuração do servidor de autorização com IdentityServer4
\nPara implementar OAuth 2.0, usaremos a biblioteca popular IdentityServer4 — um framework para ASP.NET Core que implementa os protocolos OpenID Connect e OAuth 2.0. Vamos começar criando um servidor de autorização mínimo.
\n\nPasso 1: Instalação de pacotes e criação do projeto
\nCrie um novo projeto ASP.NET Core Web Application (template vazio) e instale os pacotes NuGet necessários:
\ndotnet add package IdentityServer4\ndotnet add package Microsoft.AspNetCore.Authentication.JwtBearer\n\nPasso 2: Configuração de clientes e recursos
\nDefina usuários de teste, clientes e recursos protegidos. Crie a classe Config.cs:
public static class Config\n{\n public static IEnumerable<IdentityResource> IdentityResources =>\n new[] { new IdentityResources.OpenId(), new IdentityResources.Profile() };\n\n public static IEnumerable<ApiScope> ApiScopes =>\n new[] { new ApiScope("api1", "My API") };\n\n public static IEnumerable<Client> Clients =>\n new[]\n {\n new Client\n {\n ClientId = "client",\n AllowedGrantTypes = GrantTypes.ClientCredentials,\n ClientSecrets = { new Secret("secret".Sha256()) },\n AllowedScopes = { "api1" }\n }\n };\n}\n\nPasso 3: Registro de serviços no Startup.cs
\nConfigure o IdentityServer no método ConfigureServices:
public void ConfigureServices(IServiceCollection services)\n{\n services.AddIdentityServer()\n .AddInMemoryIdentityResources(Config.IdentityResources)\n .AddInMemoryApiScopes(Config.ApiScopes)\n .AddInMemoryClients(Config.Clients)\n .AddTestUsers(TestUsers.Users);\n\n services.AddAuthentication()\n .AddJwtBearer("Bearer", options =>\n {\n options.Authority = "https://localhost:5001";\n options.TokenValidationParameters = new TokenValidationParameters\n {\n ValidateAudience = false\n };\n });\n}\nNo método Configure, adicione a chamada app.UseIdentityServer().
2. Implementação de tokens JWT: geração e validação
\nO token JWT consiste em três partes: cabeçalho (header), payload (payload) e assinatura (signature). No .NET, a geração e verificação de JWT são feitas usando mecanismos embutidos.
\n\nGeração manual de token JWT
\nÀs vezes, é necessário criar um token manualmente, por exemplo, para testes. Use o seguinte código:
\nusing System.IdentityModel.Tokens.Jwt;\nusing Microsoft.IdentityModel.Tokens;\nusing System.Security.Claims;\nusing System.Text;\n\npublic string GenerateJwtToken(string userI