Identity Framework Web API 如何控制令牌过期时间

问题描述 投票:0回答:1

我一直在我的 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, “刷新令牌”:“” }

我一直在查看所有可见的代码。 我一直在网上搜索,但没有人提出这个问题。 理想情况下,我想要一个简单的答案。

c# asp.net-identity
1个回答
0
投票

要更改 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 声明值过期。

© www.soinside.com 2019 - 2024. All rights reserved.