2
respostas

[Dúvida] Validar tempo de expiração do token

Bom dia pessoal.

Eu quero, no meu caso, validar se o token expirou. Como eu posso fazer isso através da validação do token?

2 respostas

Olá, Fernando! Entendo que você queira verificar se um token expirou.

No código que você está estudando, o tempo de expiração do token é controlado pela propriedade ClockSkew, que está definida como TimeSpan.Zero. Isso significa que o sistema não vai tolerar nenhum desvio de tempo - ou seja, assim que o tempo de validade do token expirar, ele será considerado inválido.

Caso você queira verificar manualmente se um token expirou, você pode decodificar o token e verificar o campo exp (de expiration), que é um timestamp da data/hora de expiração do token. Existem várias bibliotecas que podem ajudar nisso, como a JwtSecurityTokenHandler do próprio .NET. Aqui está um exemplo de como você poderia fazer isso:

var handler = new JwtSecurityTokenHandler();
var tokenS = handler.ReadToken(seuToken) as JwtSecurityToken;

var dataExpiracao = tokenS.ValidTo;
if (dataExpiracao < DateTime.UtcNow) 
{
    Console.WriteLine("Token expirado.");
}
else 
{
    Console.WriteLine("Token ainda é válido.");
}

Neste exemplo, seuToken é uma string contendo o token JWT que você quer verificar. O método ReadToken decodifica o token, e a propriedade ValidTo retorna a data/hora de expiração do token. A comparação dataExpiracao < DateTime.UtcNow verifica se a data/hora de expiração é anterior à data/hora atual, indicando que o token expirou.

Lembre-se de que essa é uma verificação manual, na maioria das vezes você não precisa fazer isso, pois a própria biblioteca de autenticação vai verificar a validade do token para você.

Espero ter ajudado e bons estudos!

E como eu posso chamar esse código no arquivo de Program.cs, e obter o token que vem pela requisição?