我通过设置Payload创建了一个JwtToken,如下所示
var payload = new JwtPayload
{
{"aud", "wellmark.com" },
{"iss", "wellmark" },
{"iat", DateTime.Now.Ticks },
{"exp", DateTime.Now.AddDays(90).Ticks },
};
Run Code Online (Sandbox Code Playgroud)
我必须使用ticks的原因是因为这是获得发布时间和到期时间的整数值的唯一方法.我同意ticks实际上是一个很长的而不是int,但这是唯一的方法.
现在,当我回来验证令牌时,我正在执行以下操作
var tokenValidationParams = new TokenValidationParameters
{
IssuerSigningKey = new X509SecurityKey(jwtCert),
ValidAudience = "masked",
ValidIssuer = "masked",
IssuerSigningKeyResolver = (string token, Microsoft.IdentityModel.Tokens.SecurityToken securityToken, string kid, TokenValidationParameters validationParameters) => new List<X509SecurityKey> { new X509SecurityKey(jwtCert) }
};
tokenHandler.ValidateToken(id, tokenValidationParams
, out validatedToken);
Run Code Online (Sandbox Code Playgroud)
然而,这是失败的说法
终身验证失败.令牌缺少过期时间.Tokentype:'System.IdentityModel.Tokens.Jwt.JwtSecurityToken'.
这很可能是因为验证方法试图长转换成int型,因为它无法将其转换,它只是返回一个空如图所示的文件中表示 这里.
有没有人在这个机制上取得成功.请注意,我使用X509证书签署我的Jwt.
拉辛哈