0Pricing
C# Academy · Aula

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.Jwt

A 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:

  • SigningCredentials associa sua chave a um algoritmo.
  • Crie uma lista de Claim e, em seguida, um JwtSecurityToken com emissor, público-alvo e expiração.
  • JwtSecurityTokenHandler.WriteToken o 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

  1. Estrutura e declarações de JWT
  2. Configurando a autenticação JWT Bearer
  3. Emitindo tokens
  4. Tokens de atualização e expiração
← Voltar para C# Academy