Iis 用户配置文件和HKLM注册表均不可用。应用程序退出时,受保护的数据将不可用

Iis 用户配置文件和HKLM注册表均不可用。应用程序退出时,受保护的数据将不可用,iis,.net-core,asp.net-identity,data-protection,Iis,.net Core,Asp.net Identity,Data Protection,我正在运行一个B2B网站,在那里客户登录,查看目录和下订单。该网站运行于 一个子域(我认为这是一个重要的旁注,因为)。当客户完成订单并单击下订单按钮时,他们将返回登录屏幕,失去订单。有时,这段时间更短,有时更长。与正在重新启动的应用程序池有关吗 因此,我创建了一个日志记录功能来查看发生了什么,并发现每当用户登录时,都会创建以下日志: Using an in-memory repository. Keys will not be persisted to storage. Neither use

我正在运行一个B2B网站,在那里客户登录,查看目录和下订单。该网站运行于 一个子域(我认为这是一个重要的旁注,因为)。当客户完成订单并单击下订单按钮时,他们将返回登录屏幕,失去订单。有时,这段时间更短,有时更长。与正在重新启动的应用程序池有关吗

因此,我创建了一个日志记录功能来查看发生了什么,并发现每当用户登录时,都会创建以下日志:

Using an in-memory repository. Keys will not be persisted to storage.

Neither user profile nor HKLM registry available. Using an ephemeral key repository. Protected data will be unavailable when application exits.

No XML encryptor configured. Key {6a86c315-5115-4d16-a3f8-2ec49450b794} may be persisted to storage in unencrypted form.
我搜索了这些,找到了一个详细的解释,解释了为什么会发生这种情况。问题是IIS中的一个bug(不太可能是),解决方案是更改IIS上的一个设置,而我无法这样做。我在共享主机上。我已经和他们的支持人员讨论过了,他们说他们不能更改IIS上共享服务器的设置。因此,在IIS上将
Load User Profile
设置为
True
,对我来说不是一个选项

我还从某个地方读到,使用Azure应用程序,我可以更改生成的密钥的存储位置。不过,我还没有对此进行调查

那么,有没有办法解决这个问题?专用服务器或使用Azure服务是我唯一的选择吗

以下是我的
Startup.cs
文件中的相关部分,仅供参考

    services.Configure<IdentityOptions>(options =>
    {
        // password settings
        options.Password.RequireDigit = false;
        options.Password.RequireLowercase = false;
        options.Password.RequireUppercase = false;
        options.Password.RequireNonAlphanumeric = false;
        options.Password.RequiredLength = 6;
        options.Password.RequiredUniqueChars = 1;

        // lockout settings
        options.Lockout.DefaultLockoutTimeSpan = System.TimeSpan.FromMinutes(5);
        options.Lockout.MaxFailedAccessAttempts = 5;
        options.Lockout.AllowedForNewUsers = true;

        // sign in settings
        options.SignIn.RequireConfirmedEmail = true;
        // user settings
        options.User.AllowedUserNameCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+";
        options.User.RequireUniqueEmail = true;
    });

    services.ConfigureApplicationCookie(options =>
    {
        options.Cookie.HttpOnly = true;
        options.ExpireTimeSpan = System.TimeSpan.FromDays(45);
        options.LoginPath = "/Identity/Account/Login";
        options.AccessDeniedPath = "/Identity/Account/AccessDenied";
        options.SlidingExpiration = true;
    });
services.Configure(选项=>
{
//密码设置
options.Password.RequireDigit=false;
options.Password.RequireLowercase=false;
options.Password.RequireUppercase=false;
options.Password.RequireNonAlphanumeric=false;
options.Password.RequiredLength=6;
options.Password.RequiredUniqueChars=1;
//锁定设置
options.Lockout.DefaultLockoutTimeSpan=System.TimeSpan.FromMinutes(5);
options.locket.MaxFailedAccessAttempts=5;
options.locket.AllowedForNewUsers=true;
//登录设置
options.SignIn.RequireConfirmedEmail=true;
//用户设置
options.User.AllowedUserNameCharacters=“abcdefghijklmnopqrstuvwxyzabefghijklmnopqrstuvwxyz012456789-.@+”;
options.User.RequireUniqueEmail=true;
});
services.configureApplicationOK(选项=>
{
options.Cookie.HttpOnly=true;
options.ExpireTimeSpan=System.TimeSpan.FromDays(45);
options.LoginPath=“/Identity/Account/Login”;
options.AccessDeniedPath=“/Identity/Account/AccessDenied”;
options.SlidingExpiration=true;
});

如果您无法使用任何默认密钥持久化方法,则还有其他可用选项,例如将密钥存储在数据库(通过实体框架)、Redis、Azure KeyVault等服务中


有关更多详细信息,请参阅。

您是否查看了在您的场景中可以使用的任何其他关键存储提供商?直到你提到这件事我才知道。这个问题现在用你的建议解决了。谢谢你,但你能把这个转化成一个答案,这样我就可以接受,让未来的人看到吗?