我正在使用ASP.Net Core和MS Identity,我试图理解为什么每次部署后登录用户都会注销.

我一直在try 这个方法(设置静态机器键)

<system.web>
    <machineKey validationKey="XXX"
        decryptionKey="XXX"
        validation="SHA1" decryption="AES"/>
</system.web>

然而,问题仍然存在:

  • 用户登录
  • 停车场
  • 起点
  • 用户需要再次登录

但我也这么说:

  • 用户登录
  • 重新启动站点
  • 用户仍在登录

什么会导致用户注销?你知道怎么避免吗?

推荐答案

(解决方案在Chris发表 comments 后分为单独的答案)

我找到了一个解决方案来保持登录状态,它在网站停止/启动和网站源文件夹更新后仍然有效:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDataProtection()
            // This helps surviving a restart: a same app will find back its keys. Just ensure to create the folder.
            .PersistKeysToFileSystem(new DirectoryInfo("\\MyFolder\\keys\\"))
            // This helps surviving a site update: each app has its own store, building the site creates a new app
            .SetApplicationName("MyWebsite")
            .SetDefaultKeyLifetime(TimeSpan.FromDays(90));
}

有了这些附加行和机器密钥集,在站点停止/启动和IIS服务器重新启动之后,如果重新构建站点,登录数据将保持不变.

更多信息:https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/configuration/overview

Just Serega提出的更多建议: https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/advanced?view=aspnetcore-6.0#data-protection

Asp.net相关问答推荐

IIS重写模块排除机器人但允许GoogleBot

Azure DevOps 构建管道正在发布旧的/缓存的构建工件

如何格式化搜索字符串以从 Razor 页表中的多个列返回部分搜索字符串?

如何在没有 Select 按钮的情况下在 GridView 中实现全行 Select ?

如何在asp.net中单击按钮的新选项卡中打开页面?

IIS Request.UserHostAddress 返回 IPV6 (::1),即使禁用了 IPV6

Window.Open 使用 PDF 流而不是 PDF 位置

即使使用正确的 Accepts 标头,WebAPI 也不会返回 XML

将 null 转换为字符串的函数

多行文本框多个换行符

ASP.NET IIS - 请求何时排队?

相当于服务器端的 ASP.NET 包括

新的 ASP.NET MVC 5 应用程序如何知道如何创建数据库以及帐户控制器如何访问数据库?

在 Asp.net Rowcommand 事件中获取行索引

使用 JObject 所需的库名称是什么?

Html.RenderAction 和 Html.Action 的区别

对于 DB ID,需要一个较小的 GUID 替代方案,但对于 URL 仍然是唯一且随机的

在 ASP.NET MVC 中模拟 User.Identity

如何调试 w3wp clr.dll 错误

如何使用实体框架执行原始 SQL 查询而无需使用模型?