在ASP.Net Core中执行令牌过期检查的方法



目前,对于每次调用我的ASP.NET Core MVC应用程序,我都会在cookie的OnValidatePrincipal事件中执行以下操作:

  1. 通过调用GetTokenValue从cookie中取出id_token
  2. 调用JwtSecurityTokenHandler的ValidateToken将该令牌转换为json
  3. 从json中获取ValidTo属性
  4. 比较它以查看令牌是否已过期

对我来说,每次通话都这样做似乎有点过分。我想知道是否有什么方法可以将ValidTo值存储在cookie本身中。这样,我就不必解析json来检查每次调用的过期情况。

有没有一种方法可以存储id_tokenValidTo,这样像这样的调用就可以给我过期时间: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比较?

最新更新