c# - IdentityServer4 30 分钟后自动注销

标签 c# cookies .net-core authorization identityserver4

我有带有 Angular 的 IdentityServer4。 token 每 5 分钟静默刷新一次。但 30 分钟后,用户将自动注销。我试图以某种方式设置终身 cookie,但没有成功。

这是我目前的配置:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContext<AppIdentityDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("Identity")));

        services.AddIdentity<AppUser, IdentityRole>(options =>
            {
                options.Password.RequiredLength = 6;
                options.Password.RequireLowercase = false;
                options.Password.RequireUppercase = false;
                options.Password.RequireNonAlphanumeric = false;
                options.Password.RequireDigit = false;
                options.SignIn.RequireConfirmedEmail = true;
                options.User.RequireUniqueEmail = true;
                options.User.AllowedUserNameCharacters = null;
            })
            .AddEntityFrameworkStores<AppIdentityDbContext>()
            .AddDefaultTokenProviders();

        services.AddIdentityServer(options => options.Authentication.CookieLifetime = TimeSpan.FromHours(10))
            .AddDeveloperSigningCredential()
            .AddInMemoryPersistedGrants()
            .AddInMemoryIdentityResources(Config.GetIdentityResources())
            .AddInMemoryApiResources(Config.GetApiResources())
            .AddInMemoryClients(Config.GetClients(Configuration["AppUrls:ClientUrl"]))
            .AddAspNetIdentity<AppUser>();

        services.AddTransient<IProfileService, IdentityClaimsProfileService>();

        services.AddCors(options => options.AddPolicy("AllowAll", p => p.AllowAnyOrigin()
           .AllowAnyMethod()
           .AllowAnyHeader()));

        services.AddRazorPages().AddRazorRuntimeCompilation();
    }

@编辑

如果我会添加
services.Configure<SecurityStampValidatorOptions>(options =>
{
    options.ValidationInterval = TimeSpan.FromHours(24);
});

然后它工作正常,但我敢打赌这不是我的问题的正确解决方案。

@编辑2

我找到了这个
https://github.com/IdentityModel/oidc-client-js/issues/911#issuecomment-617724445
这对我有帮助,但仍然不确定是解决它的正确方法还是只是下一次黑客攻击。

最佳答案

据我所知,这既不是 Identity Server 4 也不是 OpenID Connect 问题。

这是 Asp.Net Identity cookie 的逻辑。这应该可以在 Startup.cs 中配置。

您需要添加以下 cookie 配置:

services.ConfigureApplicationCookie(o =>
{
    o.ExpireTimeSpan = TimeSpan.FromHours(24);
    o.SlidingExpiration = true;
});

这个答案的灵感来自以下答案:
  • Why doesn't cookie ExpireTimeSpan setting work?
  • ASP.NET Identity Session Timeout
  • Why does my IdentityServer4 based server timeout in 30 minutes and only support SSO in the first 30 minutes?
  • 关于c# - IdentityServer4 30 分钟后自动注销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62000100/

    相关文章:

    c# - 在 Winforms 中使用控件(链接标签、 TreeView )

    Python 请求修改现有 cookie 值的正确方法是什么?

    特定于 session 的中间件的 Node.js 单元测试

    .net-core - 如何使用 MqttNET 在 azure 函数中使用 PEM 文件

    c# - 带有 TextBox 子项的 TreeView SelectedItem 行为

    c# - 当表没有主键时使用 DeleteAllOnSubmit

    javascript - 如何为 webSocket javascript 设置 cookie header ?

    c# - 从 dotnet Core 2.2.6 更改为 3.0.0 后出现 EF Linq 错误

    c# - 如何处理 .net core 3.1 自包含单文件发布的 Appsettings

    c# - 如何获取数组中每个元素的绝对值