Crie Uma API Completa de E-commerce com ASP.NET Core
Guia Definitivo: JWT no ASP.NET Core com Segurança Máxima
Introduzir autenticação em uma API é um passo essencial para garantir que apenas usuários ou sistemas autorizados acessem seus recursos. Quando falamos de segurança em aplicações distribuídas, o JSON Web Token
🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real. (JWT) surge como uma solução eficaz, tornando a verificação de identidade mais simples e flexível. A ideia é bem direta: o servidor gera um token com informações de identificação e validade, e o cliente guarda e envia esse token a cada requisição. Se o token for válido, o usuário obtém acesso; caso contrário, ele é barrado.
Neste artigo, vamos explorar o JWT no contexto do ASP.NET Core
🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real. de modo abrangente, mas sem formalidades excessivas. Você vai aprender como o token é composto, como configurá-lo, como gerá-lo, validar e proteger rotas. Tudo com exemplos práticos e profundidade suficiente para que você se sinta seguro ao aplicar em seu projeto real.
📚 Neste artigo você vai aprender:🔗
- O que é JWT
🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real. e por que usar? - Estrutura de um Token JWT
🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real. - Como funciona o fluxo de autenticação JWT
📄 Swagger/OpenAPI: Documente sua API Automaticamente!Descubra como gerar documentação interativa e automatizada em APIs com o Swagger/OpenAPI. Aprenda a configurar no .NET e testar endpoints facilmente. - Configurando JWT no ASP.NET Core
🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real. - Implementando a Geração de Tokens
- [Protegendo rotas
🛠️ Controllers: Rotas que Respondem como Mágica!Aprenda a criar e configurar controllers no ASP.NET Core com dicas práticas, exemplos de rotas e integração de serviços, elevando a qualidade da sua API. com Authorize] - Testando com Swagger
📄 Swagger/OpenAPI: Documente sua API Automaticamente!Descubra como gerar documentação interativa e automatizada em APIs com o Swagger/OpenAPI. Aprenda a configurar no .NET e testar endpoints facilmente. e Postman - Boas práticas
🔢 Operadores Aritméticos: Faça Cálculos como uma Calculadora Humana!Aprenda a dominar operadores aritméticos em C# com exemplos práticos, técnicas de cálculo e dicas para evitar erros e maximizar resultados. e dicas de segurança - Conclusão
🧩 O que é JWT e por que usar?🔗
JWT _(JSON Web Token
🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real.)_ é um padrão aberto (RFC 7519) que define uma forma de transmitir informações entre partes como um objeto JSON assinado digitalmente.
Imagine que você é dono de uma loja virtual: sempre que um cliente deseja acessar sua conta ou fazer uma compra, sua aplicação pode emitir um token JWT depois que o usuário confirma sua identidade (login e senha). Na requisição seguinte, basta enviar esse token como prova de que o cliente continua logado e é quem diz ser, sem necessidade de bater no banco de dados
Conceitos fundamentais de NoSQL: bases para trabalhar com MongoDB em C#Descubra os fundamentos do NoSQL e aprenda como utilizar MongoDB com C# para desenvolver aplicações .NET escaláveis e modernas até 2025. a cada vez para revalidar credenciais (dependendo do design de sua aplicação).
Por que usá-lo?🔗
- Independência: O token fica no cliente e
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. é stateless
📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos., ou seja, o servidor não precisa rastrear sessões de usuário. - Performance: Reduz a interação com o banco de dados
Conceitos fundamentais de NoSQL: bases para trabalhar com MongoDB em C#Descubra os fundamentos do NoSQL e aprenda como utilizar MongoDB com C# para desenvolver aplicações .NET escaláveis e modernas até 2025. para validação de sessão. - Simplicidade de compartilhamento: Como é um objeto JSON assinado, é fácil transmiti-lo através de vários serviços
Criando e Escalando Serviços no Docker SwarmDescubra como criar, gerenciar e escalar serviços no Docker Swarm, utilizando comandos simples para manter alta disponibilidade em seu cluster. e se basear na assinatura para verificar integridade.
🧱 Estrutura de um Token JWT🔗
Um token típico tem 3 partes:
| Parte | Descrição | Exemplo |
|---|---|---|
| Header | Algoritmo e tipo do token | {"alg": "HS256", "typ": "JWT"} |
| Payload | Dados do usuário (claims) | {"sub": "123", "name": "Maria", "role": "admin"} |
| Signature | Assinatura digital | HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret) |
Token completo:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
🔄 Como funciona o fluxo de autenticação JWT🔗
1. Autenticação
🛡️ Segurança em SignalR: Autenticação e Autorização!Descubra como implementar JWT e autorização com roles e claims no SignalR, garantindo segurança e controle de acessos em tempo real. inicial: O usuário envia login
🎲 Desafio: Crie um Sistema de Login com Tratamento de Erros Robusto!Aprenda a criar um sistema de login robusto em C#, com tratamento de erros adequado, validação e segurança para evitar vulnerabilidades./senha para a API.
2. Geração do token: Se as credenciais estiverem corretas, o servidor emite um JWT
🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real. que contém informações do usuário (ID, nome, data de expiração etc.).
3. Envio do token: O cliente armazena esse token, geralmente no local storage ou cookie seguro
🛡️ Segurança em SignalR: Autenticação e Autorização!Descubra como implementar JWT e autorização com roles e claims no SignalR, garantindo segurança e controle de acessos em tempo real..
4. Requisições subsequentes: Para cada endpoint
📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. protegido, o cliente envia o token no cabeçalho HTTP (geralmente Authorization: Bearer {token}) ou em um cookie.
5. Validação e autorização
🛡️ Segurança em SignalR: Autenticação e Autorização!Descubra como implementar JWT e autorização com roles e claims no SignalR, garantindo segurança e controle de acessos em tempo real.: O servidor valida se o token é íntegro e
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. ainda não expirou. Se estiver válido, a requisição segue; caso contrário, é negada.
⚙️ Configurando JWT no ASP.NET Core🔗
Você pode adicionar suporte ao JWT dentro do seu projeto .NET de maneira relativamente simples. Suponhamos que você já tenha criado um projeto ASP.NET Core
🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real.. No arquivo Program.cs (ou Startup
Medindo e comparando: Benchmarks de tempo de inicialização AOT vs JITDescubra como otimizar o tempo de startup de aplicações .NET através da comparação entre AOT e JIT, garantindo performance superior e experiência ágil..cs, dependendo da versão), podemos configurar a autenticação
🛡️ Segurança em SignalR: Autenticação e Autorização!Descubra como implementar JWT e autorização com roles e claims no SignalR, garantindo segurança e controle de acessos em tempo real. assim:
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.IdentityModel.Tokens;
using System.Text;
var builder = WebApplication.CreateBuilder(args);
// =============================
// 1. Configurar serviços
// =============================
builder.Services.AddControllers();
// Configura a autenticação JWT
builder.Services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
// Aqui definimos como o token será validado
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true, // Valida se o emissor é confiável
ValidateAudience = true, // Valida se o destinatário do token é correto
ValidateLifetime = true, // Verifica se o token expirou
ValidateIssuerSigningKey = true,// Verifica a assinatura digital
ValidIssuer = "MinhaAPI", // Issuer esperado
ValidAudience = "MeuApp", // Audience esperada
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("chave-super-secreta"))
};
});
var app = builder.Build();
// =============================
// 2. Configurar pipeline
// =============================
app.UseAuthentication();
app.UseAuthorization();
app.MapControllers();
app.Run();
Observações Importantes:
IssuerSigningKey: é a chave
🗂️ Dicionários: Acesse Dados por Chaves como um Mestre dos HashMaps!Aprenda a usar dicionários em C# de modo prático e eficiente. Nosso tutorial mostra criação, acesso e otimização para manipular dados com segurança. usada para assinar o token. Não exponha ou versione essa chave em repositórios
📦 Repository Pattern: Abstraia seu Acesso a Dados!Descubra como o Repository Pattern organiza o acesso a dados, isolando a lógica de persistência e facilitando manutenção, testes e escalabilidade. públicos.ValidIssuere
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. ValidAudience: ajudam a identificar de onde o token saiu e para onde vai. Se algo não bater com o token recebido, a validação
Como Assegurar Validação e Cobertura de Código em Projetos LINQAprenda estratégias avançadas para testar consultas LINQ, garantindo cobertura de código e confiabilidade com ferramentas e práticas recomendadas. falha.
🔧 Implementando a Geração de Tokens🔗
Agora vamos ver como criar o token no momento em que o usuário faz login com credenciais corretas. Exemplo de um método em um controller
🛠️ Controllers: Rotas que Respondem como Mágica!Aprenda a criar e configurar controllers no ASP.NET Core com dicas práticas, exemplos de rotas e integração de serviços, elevando a qualidade da sua API. para gerar o token:
[ApiController]
[Route("api/[controller]")]
public class AuthController : ControllerBase
{
[HttpPost("login")]
public IActionResult Login([FromBody] LoginModel model)
{
// 1. Verificar se o usuário existe e se a senha está correta.
if (model.Username != "admin" || model.Password != "123")
{
return Unauthorized("Usuário ou senha inválidos!");
}
// 2. Construir o token
var secretKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("chave-super-secreta"));
var credentials = new SigningCredentials(secretKey, SecurityAlgorithms.HmacSha256);
var token = new JwtSecurityToken(
issuer: "MinhaAPI",
audience: "MeuApp",
expires: DateTime.Now.AddHours(2),
signingCredentials: credentials
);
// 3. Escrever a string do token
var tokenString = new JwtSecurityTokenHandler().WriteToken(token);
// 4. Retornar o token para o cliente
return Ok(new { Token = tokenString });
}
}
public class LoginModel
{
public string Username { get; set; }
public string Password { get; set; }
}
Neste controller
🛠️ Controllers: Rotas que Respondem como Mágica!Aprenda a criar e configurar controllers no ASP.NET Core com dicas práticas, exemplos de rotas e integração de serviços, elevando a qualidade da sua API., caso o login
🎲 Desafio: Crie um Sistema de Login com Tratamento de Erros Robusto!Aprenda a criar um sistema de login robusto em C#, com tratamento de erros adequado, validação e segurança para evitar vulnerabilidades. e
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. password estejam corretos, geramos um JWT
🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real.. Observe que definimos o issuer e
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. audience de forma consistente com o que configuramos no TokenValidationParameters.
🛡️ Protegendo rotas com [Authorize]🔗
Para que uma rota passe a exigir o token JWT, basta anotar o controlador
🛠️ Controllers: Rotas que Respondem como Mágica!Aprenda a criar e configurar controllers no ASP.NET Core com dicas práticas, exemplos de rotas e integração de serviços, elevando a qualidade da sua API. ou a action com o atributo
📜 Atributos Customizados: Metadados que Guiam seu Código!Descubra como atributos customizados potencializam a organização do código, facilitam auditorias e testes, e garantem eficiência. [Authorize]. Por exemplo:
[ApiController]
[Route("api/[controller]")]
[Authorize] // Agora todos os endpoints daqui exigem token válido
public class ProductsController : ControllerBase
{
[HttpGet]
public IActionResult GetProducts()
{
return Ok(new { Message = "Aqui estão os produtos, mas você só enxerga se estiver autenticado! :)" });
}
}
Quando
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. o cliente fizer uma requisição para api, deverá passar no cabeçalho HTTP algo como:
🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real./products
Authorization: Bearer <seu-token-jwt>
Se o token estiver ausente ou inválido, a resposta será 401 Unauthorized.
🔍 Testando com Swagger e Postman🔗
Configure o Swagger
📄 Swagger/OpenAPI: Documente sua API Automaticamente!Descubra como gerar documentação interativa e automatizada em APIs com o Swagger/OpenAPI. Aprenda a configurar no .NET e testar endpoints facilmente. para aceitar JWT:
builder.Services.AddSwaggerGen(c =>
{
// ... outras configurações
c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
{
Description = "JWT Authorization header using the Bearer scheme",
Type = SecuritySchemeType.Http,
Scheme = "bearer"
});
c.AddSecurityRequirement(new OpenApiSecurityRequirement
{
{
new OpenApiSecurityScheme
{
Reference = new OpenApiReference
{
Type = ReferenceType.SecurityScheme,
Id = "Bearer"
}
},
new string[] {}
}
});
});
Exemplo de requisição no Postman
🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real.:
GET /api/payments
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
🚨 Boas Práticas e Armadilhas🔗
- Armadilha 1: Não armazene segredos
Gerenciando Secrets e Configs em Docker SwarmAprenda a proteger credenciais, chaves e tokens com Docker Swarm. Gerencie Secrets e Configs de forma segura, garantindo integridade dos dados críticos. no código
// appsettings.json
"Jwt": {
"Key": "ChaveSuperSecretaComNoMinimo32Caracteres!",
"Issuer": "https://seudominio.com",
"Audience": "https://seudominio.com"
}
- Boas Práticas
🔢 Operadores Aritméticos: Faça Cálculos como uma Calculadora Humana!Aprenda a dominar operadores aritméticos em C# com exemplos práticos, técnicas de cálculo e dicas para evitar erros e maximizar resultados.:
- Use HTTPS em produção
- Implemente refresh tokens
- Revogue tokens comprometidos
- Valide expiration time
- Use roles
🛡️ Segurança em SignalR: Autenticação e Autorização!Descubra como implementar JWT e autorização com roles e claims no SignalR, garantindo segurança e controle de acessos em tempo real. com moderação
🎯 Desafio Prático🔗
1. Crie um sistema de roles
🛡️ Segurança em SignalR: Autenticação e Autorização!Descubra como implementar JWT e autorização com roles e claims no SignalR, garantindo segurança e controle de acessos em tempo real. (admin, user, guest)
2. Implemente um endpoint
📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. que só admins podem acessar
3. Adicione expiração de token de 1 hora
4. Implemente renovação de token via refresh token
// Exemplo de refresh token
public class RefreshToken
{
public string Token { get; set; }
public DateTime Expires { get; set; }
public DateTime Created { get; set; }
public string CreatedByIp { get; set; }
}
Conclusão🔗
O JWT traz simplicidade e segurança para a autenticação de APIs ao trabalhar de forma desacoplada e sem estado. Entender sua anatomia e aplicação no ASP.NET Core é fundamental para criar soluções escaláveis e seguras. Depois de configurar a autenticação com JWT, basta manter boas práticas
🔢 Operadores Aritméticos: Faça Cálculos como uma Calculadora Humana!Aprenda a dominar operadores aritméticos em C# com exemplos práticos, técnicas de cálculo e dicas para evitar erros e maximizar resultados. no uso dos tokens e na proteção de suas rotas para que o sistema se beneficie ao máximo desse modelo de autenticação.
Com essa base, você já tem o necessário para implementar tokens JWT na sua Web API em ASP.NET Core
🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real.. Daqui em diante, o próximo passo é explorar sistemas de refresh token, analisar como clientes (front-end, mobile, etc.) vão usar esses tokens e garantir que tudo seja feito em um ambiente seguro
🛡️ Segurança em SignalR: Autenticação e Autorização!Descubra como implementar JWT e autorização com roles e claims no SignalR, garantindo segurança e controle de acessos em tempo real.. Boa codificação!
Leia também:🔗
- Documentação oficial JWT
🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real. em .NET - Implementando refresh tokens
- Melhores práticas de segurança
🔏 Criptografia Assimétrica: Domine RSA e Troca de Chaves!Descubra como a criptografia assimétrica protege a troca de chaves e garante segurança em sistemas digitais usando RSA, C# e práticas recomendadas. JWT
Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.
Referências🔗
- .NET Documentation: learn.microsoft.com/pt-br/dotnet/
- Awesome .NET: github.com/quozd/awesome-dotnet
- C# Language Specification: learn.microsoft.com/pt-br/dotnet/csharp/language-reference/language-specification/
- GitHub: Microsoft/.NET: github.com/dotnet
- Microsoft Learn: C# e .NET: learn.microsoft.com/pt-br/dotnet/csharp/
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 9 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás