Emitindo tokens
Gere tokens assinados no login.
Emitindo tokens é uma aula grátis de C# Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C# Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C# Academy inclui 4 aulas no total.
Emissão versus validação
Até agora, você validou tokens. Agora você os emitirá: depois que um usuário entrar com sucesso, sua API criará um JWT assinado e o devolverá.
O tipo principal para isso é JwtSecurityTokenHandler, de System.IdentityModel.Tokens.Jwt.
dotnet add package System.IdentityModel.Tokens.JwtA chave de assinatura
Para assinar um token, você precisa de uma chave. Para HS256, reutilize o mesmo segredo simétrico usado pelo validador.
Mantenha esse segredo fora do controle de versão; carregue-o da configuração ou de um armazenamento de segredos.
var key = new SymmetricSecurityKey(
Encoding.UTF8.GetBytes(configuration["Jwt:Key"]!));SigningCredentials
SigningCredentials associa a chave ao algoritmo. Para uma chave simétrica, use SecurityAlgorithms.HmacSha256.
var creds = new SigningCredentials(
key,
SecurityAlgorithms.HmacSha256);Construindo as declarações
Decida o que incluir no token. Sempre inclua um assunto (o identificador do usuário) e quaisquer funções ou dados de que a API precise.
Adicione um jti exclusivo para que cada token possa ser identificado.
var claims = new List<Claim>
{
new Claim(JwtRegisteredClaimNames.Sub, user.Id.ToString()),
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
new Claim(ClaimTypes.Name, user.UserName),
new Claim(ClaimTypes.Role, user.Role)
};Criando o JwtSecurityToken
JwtSecurityToken reúne o emissor, o público-alvo, as declarações, a expiração e as credenciais de assinatura em um objeto de token.
var token = new JwtSecurityToken(
issuer: configuration["Jwt:Issuer"],
audience: configuration["Jwt:Audience"],
claims: claims,
notBefore: DateTime.UtcNow,
expires: DateTime.UtcNow.AddMinutes(15),
signingCredentials: creds);Serializando para uma cadeia de caracteres
O objeto do token precisa ser gravado em seu formato compacto de cadeia de caracteres header.payload.signature antes de ser enviado ao cliente.
var handler = new JwtSecurityTokenHandler();
string jwt = handler.WriteToken(token);
// jwt now looks like eyJhbGciOiJI...Um serviço de tokens reutilizável
Encapsule a lógica em um serviço para manter os controladores limpos e a configuração em um só lugar.
public class TokenService(IConfiguration config)
{
public string CreateAccessToken(AppUser user)
{
var key = new SymmetricSecurityKey(
Encoding.UTF8.GetBytes(config["Jwt:Key"]!));
var creds = new SigningCredentials(
key, SecurityAlgorithms.HmacSha256);
var claims = new[]
{
new Claim(JwtRegisteredClaimNames.Sub, user.Id.ToString()),
new Claim(ClaimTypes.Role, user.Role)
};
var token = new JwtSecurityToken(
config["Jwt:Issuer"], config["Jwt:Audience"],
claims, expires: DateTime.UtcNow.AddMinutes(15),
signingCredentials: creds);
return new JwtSecurityTokenHandler().WriteToken(token);
}
}Configurando o ponto de acesso de login
O ponto de acesso de login verifica as credenciais, chama o serviço e devolve o token ao cliente.
app.MapPost("/login", (LoginDto dto, TokenService tokens) =>
{
var user = Authenticate(dto.Username, dto.Password);
if (user is null) return Results.Unauthorized();
return Results.Ok(new { accessToken = tokens.CreateAccessToken(user) });
});Simétrica versus assimétrica
HS256 usa um único segredo compartilhado tanto para assinar quanto para validar. RS256 usa uma chave privada para assinar e uma chave pública para validar.
A assinatura assimétrica permite publicar a chave pública para que outros serviços validem os tokens sem jamais possuir o segredo de assinatura.
var creds = new SigningCredentials(
new RsaSecurityKey(rsaPrivateKey),
SecurityAlgorithms.RsaSha256);Registrando o serviço
Adicione o serviço de tokens à injeção de dependências para que ele possa ser injetado nos pontos de acesso e nos controladores.
builder.Services.AddScoped<TokenService>();Mantenha os tokens enxutos e curtos
Duas práticas recomendadas ao emitir tokens:
- Enxutos: inclua apenas as declarações de que a API precisa; o token acompanha todas as solicitações.
- De curta duração: tokens de acesso de 5 a 15 minutos limitam os danos caso um deles vaze.
expires: DateTime.UtcNow.AddMinutes(15)Verificação rápida
Confirme o que você aprendeu sobre a emissão de tokens.
Recapitulação
Você emitiu JWTs assinados:
SigningCredentialsassocia sua chave a um algoritmo.- Crie uma lista de
Claime, em seguida, umJwtSecurityTokencom emissor, público-alvo e expiração. JwtSecurityTokenHandler.WriteTokeno serializa para a cadeia de caracteres compacta.- Mantenha os tokens enxutos e com curta duração.
Em seguida: tokens de atualização e estratégias de expiração.
Perguntas Frequentes
A aula “Emitindo tokens” é grátis?
Sim — o texto completo de “Emitindo tokens” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C# Academy, atualize para CoddyKit PRO. O curso de C# Academy inclui 4 aulas no total.
O que vou aprender em “Emitindo tokens”?
Gere tokens assinados no login. Você pratica C# Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar C# Academy?
Nenhuma experiência prévia é necessária. C# Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “Emitindo tokens”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de C# Academy?
Sim. Cada aula de C# Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Estrutura e declarações de JWT
- Configurando a autenticação JWT Bearer
- Emitindo tokens
- Tokens de atualização e expiração