目前,对于每次调用我的ASP.NET Core MVC应用程序,我都会在cookie的OnValidatePrincipal
事件中执行以下操作:
- 通过调用
GetTokenValue
从cookie中取出id_token
- 调用
JwtSecurityTokenHandler
的ValidateToken将该令牌转换为json - 从json中获取
ValidTo
属性 - 比较它以查看令牌是否已过期
对我来说,每次通话都这样做似乎有点过分。我想知道是否有什么方法可以将ValidTo值存储在cookie本身中。这样,我就不必解析json来检查每次调用的过期情况。
有没有一种方法可以存储id_token
的ValidTo
,这样像这样的调用就可以给我过期时间:GetTokenValue("id_token_valid_to")
检查此链接:https://www.c-sharpcorner.com/article/jwt-json-web-token-authentication-in-asp-net-core/
但用几句话来说,你必须在你的启动文件中添加这样的东西:
services.AddAuthentication(x =>
{
x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(x =>
{
x.RequireHttpsMetadata = false;
x.SaveToken = true;
x.TokenValidationParameters = new TokenValidationParameters
{
IssuerSigningKey = key,
ValidateIssuerSigningKey = true,
ValidateLifetime = true,
ValidateIssuer = false,
ValidAudience =Configuration["Tokens:Audience"] ,
ValidateAudience = true
};
});
之后,您可以在基本控制器或授权过滤器中检查User.Identity.IsAuthenticated。如果令牌已过期,则为false。在这之后,如果你需要的话,你可以过期。
这只是一个想法。
您认为是否可以将Claim设置为与JWT ExpiryDateTime值相同的。在AttributeClass中,如果您要求将令牌作为一项要求,您可以有代码从给定令牌中读取索赔,查找与DateTime到期相关的索赔,并与之进行基本的DateTime比较?