C# ASP.Net核心中检查令牌过期的性能方法
目前,对于每次调用我的ASP.NET Core MVC应用程序,我都会在cookie的C# ASP.Net核心中检查令牌过期的性能方法,c#,asp.net-core,asp.net-core-3.1,C#,Asp.net Core,Asp.net Core 3.1,目前,对于每次调用我的ASP.NET Core MVC应用程序,我都会在cookie的OnValidatePrincipal事件中执行以下操作: 通过调用GetTokenValue从cookie中获取id\u令牌 调用JwtSecurityTokenHandler的ValidateToken将令牌转换为json 从json中获取ValidTo属性 比较它以查看令牌是否过期 我觉得每次打电话都这么做有点过分。我想知道是否有什么方法可以将ValidTo值存储在cookie本身中。这样,我就不必解析j
OnValidatePrincipal
事件中执行以下操作:
GetTokenValue
从cookie中获取id\u令牌
ValidTo
属性id\u令牌的有效存储到中,这样一个调用就可以让我过期:GetTokenValue(“id\u令牌有效到”)
?
检查此链接:
但简单地说,您必须在启动文件中添加如下内容:
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。在此之后,如果需要,您可以选择过期日期。不要将ValidTo值存储在违背使用JWT目的的cookie中。您只能信任JWT中存储的信息。您是否测量了检查令牌是否过期所需的时间?我怀疑这有什么好担心的。一个安全的系统比让您的服务器快速响应几毫秒更有价值。web服务器是无状态的,每个请求都需要验证。无法信任该用户。“为什么是,我是一个管理员用户,老实说……”我不知道如果令牌过期,
IsAuthenticated
将为假(尽管这是有道理的)。这将是一个很好的方式,使大多数电话不需要检查过期日期。(如果为false,我可以检查是否需要使用更新令牌。)谢谢!是的,如您所见,有一个选项ValidateLifetime=true检查令牌生存期。当答案对你有效时,请别忘了注明答案已被接受。