use*_*018 13 c# jwt azure-active-directory bearer-token
我正在使用System.IdentityModel.Tokens.Jwt
包和下面的代码解码令牌jwt
,但它不会给出 exp
值?
var handler = new JwtSecurityTokenHandler();
var decodedValue = handler.ReadJwtToken("token");
Run Code Online (Sandbox Code Playgroud)
如何获取exp
并与当前DateTime进行比较来计算token是否过期?
更新:
我正在使用Azure.Core.AccessToken
我拥有以下属性的地方,
public DateTimeOffset ExpiresOn
{
get;
}
Run Code Online (Sandbox Code Playgroud)
小智 23
我用这个:
using System.IdentityModel.Tokens.Jwt;
public static long GetTokenExpirationTime(string token)
{
var handler = new JwtSecurityTokenHandler();
var jwtSecurityToken = handler.ReadJwtToken(token);
var tokenExp = jwtSecurityToken.Claims.First(claim => claim.Type.Equals("exp")).Value;
var ticks= long.Parse(tokenExp);
return ticks;
}
public static bool CheckTokenIsValid(string token)
{
var tokenTicks = GetTokenExpirationTime(token);
var tokenDate = DateTimeOffset.FromUnixTimeSeconds(tokenTicks).UtcDateTime;
var now = DateTime.Now.ToUniversalTime();
var valid = tokenDate >= now;
return valid;
}
Run Code Online (Sandbox Code Playgroud)
Sin*_*YAS 18
这就是我检查令牌是否有效的方法。
using System.IdentityModel.Tokens.Jwt;
private bool IsValid(string token)
{
JwtSecurityToken jwtSecurityToken;
try
{
jwtSecurityToken = new JwtSecurityToken(token);
}
catch (Exception)
{
return false;
}
return jwtSecurityToken.ValidTo > DateTime.UtcNow;
}
Run Code Online (Sandbox Code Playgroud)