我一直在我的 ASP.Net Core Web API 项目中使用 Identity Framework 包。我有以下设置:
在 Program.cs 上:
builder.Services.AddAuthentication(options =>
{
options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(builder.Configuration["Jwt:Key"])),
ValidateLifetime = true,
ClockSkew = TimeSpan.FromMinutes(5),
ValidateIssuer = false,
ValidateAudience = false,
};
});
builder.Services.AddAuthorization(options =>
{
options.AddPolicy("GeneralAccess", policy =>
policy.RequireAssertion(context =>
context.User.IsInRole("Admin") ||
context.User.IsInRole("User")));
});
//Setup Database Context
builder.Services.AddDbContext<DemoSecurityDbContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("SecurityConnection")));
//This will add the API endpoints for the Identity DB
builder.Services
.AddIdentityApiEndpoints<DemoUser>(options => options.SignIn.RequireConfirmedAccount = true)
//.AddIdentity<DemoUser, DemoIdentityRoles>()
.AddRoles<DemoIdentityRoles>()
.AddEntityFrameworkStores<DemoSecurityDbContext>();
app.MapGroup("/account").MapIdentityApi<DemoUser>();
我一直在研究 MapIdentity 和 SignManager 以了解如何更改令牌到期日期,目前设置为 3600,但我找不到覆盖此值的简单方法。 我在代码中看不到令牌是在哪里生成的,3600太多了 { "tokenType": "承载者", "accessToken": "", “过期”:3600, “刷新令牌”:“” }
我一直在查看所有可见的代码。 我一直在网上搜索,但没有人提出这个问题。 理想情况下,我想要一个简单的答案。
要更改 ASP.NET Core Identity JWT 令牌中的令牌过期时间,您可以在配置 JWT 身份验证时修改 TokenValidationParameters。在您使用 JWT 承载配置身份验证的 Program.cs 中,您可以调整 TokenValidationParameters,如下所示:
builder.Services.AddAuthentication(options =>
{
options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(builder.Configuration["Jwt:Key"])),
ValidateLifetime = true,
ClockSkew = TimeSpan.Zero, // Remove the clock skew
ValidateIssuer = false,
ValidateAudience = false,
};
});
将 ClockSkew 设置为 TimeSpan.Zero,可以有效禁用时钟偏差,这意味着令牌将严格按照令牌有效负载中的 exp 声明值过期。