Я хочу использовать 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);
}
Как вы можете видеть здесь, я пытаюсь извлечь срок действия токена время и полезная нагрузка. Я думаю, что полезная нагрузка должна работать нормально, но как мне извлечь информацию об истечении срока действия?