c# - .Net Core 2.x 用户会话意外退出共享主机
问题描述
我正在玩aspnetboilerplate.com 的dotnet core 模板。我想要做的是将模板部署在运行 Plesk 的共享主机(Windows)服务器上(注意,我根本无法控制服务器)。
该模板在本地完美运行,可以登录、添加用户、角色等。将其部署到共享托管服务器出现了一些问题,但相对较快地解决了(为 dotnet core 配置并且必须降到 dotnet core 2.1,因为 2.2 不是但在服务器上支持)。
现在的问题是登录后,我在一分钟内重新定向到登录页面。我在使用 ASP.NET MVC5 时遇到过类似的问题,但在 web.config 中提供了一个机器密钥并使用数据库存储会话数据可以解决该问题。所以我推断它与 dotnet 应用程序有同样的问题。
但是看到 dotnet 核心不使用机器密钥并且 DataProtectionApis 需要一种不同的方法。
所以我尝试添加services.AddDataProtection();
到StartUp.Configure()
我已经阅读了 ASP.NET Core 中的分布式缓存以及几乎所有链接以及尝试了多个代码示例,但要么我不知道我在做什么(很有可能),要么我没有做正确的事情。
那么,如何防止用户在共享托管服务器上使用 dotnet core 2.1 意外退出?
编辑 - 2019-01-25
一些新信息:尝试按照建议设置超时,但这要么什么都不做,要么不可能。为了让 dotnet 应用程序在 Plesk 上运行,我必须禁用 ASP.NET 支持,以便 .NET 核心获得无托管代码应用程序池。尝试访问 Plesk 上的 ASP.Net 设置(您可以访问应用程序池设置等)会出现错误,提示“此网站的 ASP.NET 支持已关闭”。
不会发生的一件事是发布时永远不会创建 App_Data/Logs 文件夹。我必须手动创建和设置权限,以便 log4net 可以创建日志文件。日志文件为我提供了更多信息:
ERROR 2019-01-25 09:33:03,005 [6 ] .Antiforgery.Internal.DefaultAntiforgery - An exception was thrown while deserializing the token.
Microsoft.AspNetCore.Antiforgery.AntiforgeryValidationException: The antiforgery token could not be decrypted. ---> System.Security.Cryptography.CryptographicException: The key {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} was not found in the key ring.
仅再次搜索此错误将我引导到有关添加services.AddDataProtection()
到 ConfigureServices 方法的文档,但是这个关于 Azure Key Vaults(或其他外部提供程序)或将信息写入共享 UNC 以便其他服务器可以访问缓存的密钥信息(和这可能是我需要的)。但是由于我无法使用所有这些选项,因此我找到了一种扩展方法,该方法允许将密钥存储在 MSSQL 服务器上。现在正忙于设置它以进行测试。
如果有人想发表意见,请成为我的客人。
更新 2 - 2019-01-25 - 成功(暂时)
看来使用 DataProtectionAPI 是要走的路。日志还没有报告任何AntiforgeryValidationException
。我将让它运行一段时间,如果一切顺利,我将发布解决方案以及它是如何实施的。
解决方案
由于PersistKeysToSqlServer
dot net core 3.1 不支持,我们可以使用.PersistKeysToDbContext<AppDBContext>()
或PersistKeysToFileSystem
,如图所示。
推荐阅读
- python - 在 Pycharm 编辑器中,MySQL 命令“显示数据库”在运行后不返回结果或错误?
- python - 带有 GMT 值的 Django Pytz 时区全名
- python - scrapy-splash 给我这个错误“HTTP 状态代码未处理或不允许”
- css - React Material UI – 使用 UI Grid 将屏幕一分为二,一半可滚动,另一半固定
- sql - 使用 2 组,是否可以将第 2 组拆分为列?
- deep-learning - 为什么当有 5GB 可用内存时 pytorch(CUDA) 无法分配 290MB
- sql-server - 无法访问 Azure SQL Server - 登录失败
- python - 如何从 Python 中的字典列表中更改特定值
- for-loop - roblox 中的“限制必须是数字”错误(数据保存和加载)
- cassandra - 在 Cassandra 中处理不可压缩/重叠的 sstable