Asp Net Core 身份验证问题

Posted

技术标签:

【中文标题】Asp Net Core 身份验证问题【英文标题】:Asp Net Core authentication troubles 【发布时间】:2020-04-09 11:09:21 【问题描述】:

我已经用 Angular 制作了 asp net core web 应用程序。它使用基于 cookie 的身份验证,使用标准的网络核心身份验证机制。一切正常,直到 IIS 重新启动(回收)。应用程序重新启动后,所有用户都将未经身份验证,需要重新登录。

可能有人知道应该怎么做才能使存储在 cookie 中的信息在几天内真实有效,而不是依赖于应用程序重新启动。

这是一段代码

public void ConfigureServices(IServiceCollection services)

  services.AddDbContext<MyAppContext>(options => options.Usemysql(connectionString));
  services.AddIdentity<ApplicationUser, ApplicationRole>(options =>
  
    options.User.RequireUniqueEmail = true;
    options.SignIn.RequireConfirmedEmail = true;
  )
  .AddEntityFrameworkStores<MyAppContext>()
  .AddDefaultTokenProviders();

  services.AddAuthorization();
  services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
       .AddCookie(options =>
       
          options.SlidingExpiration = true;
          options.ExpireTimeSpan = System.TimeSpan.FromDays(7);
          options.LoginPath = $"/Identity/Login";
          options.LogoutPath = $"/Identity/Logout";
          options.Cookie.IsEssential = true;
       );


public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)

    app.UseHttpsRedirection();
    app.UseStaticFiles();
    app.UseSpaStaticFiles();

    app.UseRouting();

    app.UseAuthentication();
    app.UseAuthorization();

【问题讨论】:

不记得确切的 .net 核心,但您需要将加密密钥保存在应用程序配置文件中。 我想了想,.Net core 不使用 IIS 的配置文件。 是的,但你可以在 appSetting.json 中使用它 【参考方案1】:

Asp.Net Core 使用Data Protection 机制来生成临时的encryption keys。并且随着服务器或IIS的重新启动,这些密钥将丢失并且re-generated

为了使用于加密 Web 应用程序信息的密钥永久存储并且不会随着服务器重新启动而丢失,您可以转到 IIS 中的 Application pool 设置并将 Load user profile 设置为 True

在这种情况下,密钥将永久存储在应用程序的application pool 的用户配置文件文件夹中,由 Windows DPAPI 机制加密。

或者您可以查看这些链接1,2 以在iis 重置后保持登录状态

【讨论】:

感谢您的回复。我已经测试过这个chages,但它没有帮助:-( IIS重启后仍然需要再次登录 @antonad 我更新了我的答案。希望对你有帮助 谢谢,这行得通。非常简单的解决方案,但我错过了。 @antonad 祝你好运;)

以上是关于Asp Net Core 身份验证问题的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core 中的 Jwt 令牌身份验证

ASP.NET Core 中的按操作身份验证处理程序

ASP.NET Core Web API 身份验证

Cookie 身份验证 ASP.NET Core

ASP.NET Core JWT 身份验证更改声明(子)

使用 ASP.NET Core 的应用程序和用户身份验证