我有一个ASP.NET核心应用程序(1.1针对完整框架),它使用TempDataProvider存储有关当前登录用户的一些元数据,例如他们的"显示名称"和应用程序的一些其他首选项。在我的Startup.cs ConfigureServices
方法中,我添加了行
services.AddSingleton<ITempDataProvider, CookieTempDataProvider>();
使用(例如)
登录后填充TempData["DisplayName"] = login.DisplayName;
这很有效,为名为.AspNetCore.Mvc.CookieTempDataProvider
的用户创建加密的分块会话cookie。我可以偷看&#34;并按照我的预期清除退出等。但是在一段时间之后 - 也许应用程序池空闲,但浏览器会话保持活动状态 - 我收到一个CryptographicException:
System.Security.Cryptography.CryptographicException:在密钥环中找不到密钥{guid}
出现浏览器会话cookie仍然很好,但服务器已经失去了解密和使用它的能力。目前解决的唯一方法是手动清除cookie并让应用程序创建一个新的。
有没有办法防止这种行为?我确实希望cookie的内容难以/不可能伪造,这似乎是实现这一目标的有效机制。