Как извлечь срок действия токена с помощью пакета System.IdentityModel.Tokens.Jwt - PullRequest
1 голос
/ 14 июля 2020

Я хочу использовать JSON веб-токенов для аутентификации в моем. NET основном проекте. Вот почему я добавил к нему пакет System.IdentityModel.Tokens.Jwt.

Я знаком с JavaScript эквивалентным jsonwebtoken пакетом , который предоставляет verify функция для проверки и декодирования токена.

В большинстве случаев мне нужно только извлечь полезную нагрузку, чтобы получить пользователя и другую информацию, но в некоторых случаях мне также нужно знать, когда истекает срок действия токена (например, признание недействительным токен, сохранив его в базе данных и удалив по истечении срока действия).

Я начал с этого примера кода

public object ValidateAndDecodeToken(string token)
{
    SymmetricSecurityKey symmetricSecurityKey = GenerateSymmetricSecurityKey("db3OIsj+BXE9NZDy0t8W3TcNekrF+2d/1sFnWG4HnV8TZY30iTOdtVWJG8abWvB1GlOgJuQZdcF2Luqm/hccMw=="); // From config
        
    try
    {
        JwtSecurityTokenHandler tokenHandler = new JwtSecurityTokenHandler();
            
        TokenValidationParameters tokenValidationParameters = new TokenValidationParameters()
        {
            ValidateIssuerSigningKey = true,
            IssuerSigningKey = symmetricSecurityKey
        };
            
        tokenHandler.ValidateToken(token, tokenValidationParameters, out SecurityToken validatedToken);

        DateTime tokenExpiresAt = DateTime.Now; // TODO
        JwtSecurityToken jwtSecurityToken = tokenHandler.ReadJwtToken(encodedToken);
        Dictionary<string, string> tokenPayload = jwtSecurityToken.Claims.ToDictionary(claim => claim.Type, claim => claim.Value);

        return new { token, tokenExpiresAt, tokenPayload };
    }
    catch
    {
        throw;
    }
}

private SymmetricSecurityKey GenerateSymmetricSecurityKey(string base64Secret)
{
    byte[] symmetricKey = Convert.FromBase64String(base64Secret);
    return new SymmetricSecurityKey(symmetricKey);
}

Как вы можете видеть здесь, я пытаюсь извлечь срок действия токена время и полезная нагрузка. Я думаю, что полезная нагрузка должна работать нормально, но как мне извлечь информацию об истечении срока действия?

1 Ответ

2 голосов
/ 14 июля 2020

Из вашего образца кода вы сможете получить срок действия как:

tokenHandler.ValidateToken(token, tokenValidationParameters, out SecurityToken validatedToken);

var tokenExpiresAt = validatedToken.ValidTo;
...