gpt4 book ai didi

c# - 如何使用 System.IdentityModel.Tokens.Jwt 包提取 token 过期时间

转载 作者:行者123 更新时间:2023-12-04 09:29:31 27 4
gpt4 key购买 nike

我想在我的 .NET Core 项目中使用 JSON Web token 进行身份验证。这就是为什么我添加了 System.IdentityModel.Tokens.Jwt包给它。
我熟悉 JavaScript equivalent jsonwebtoken package它提供了一个 verify 函数来验证和解码 token 。
大多数情况下,我只需要提取有效载荷来获取用户和其他信息,但在某些情况下,我还需要知道 token 何时到期(例如,通过将 token 存储到数据库并在到期后将其删除来使 token 无效) .
我从这个示例代码开始

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);
}
正如您在此处看到的,我正在尝试提取 token 到期时间和有效负载。我认为有效负载应该可以正常工作,但如何提取到期信息?

最佳答案

从您的示例代码中,您应该能够获得到期时间为:

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

var tokenExpiresAt = validatedToken.ValidTo;

关于c# - 如何使用 System.IdentityModel.Tokens.Jwt 包提取 token 过期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62902754/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com