我正在尝试创建一个web场,其中包含多个docker容器,所有这些容器都运行相同的asp.net core 3.1应用程序。因此,我需要管理一个分布式会话,我的想法是使用redis来做到这一点。
根据这篇文章,我在我的报告中增加了以下陈述 ConfigureServices
方法:
var redis = ConnectionMultiplexer.Connect(redis_connection_string);
services.AddDataProtection()
.PersistKeysToStackExchangeRedis(redis, "DataProtection-Keys")
.SetApplicationName("seminarmanager");
services.AddStackExchangeRedisCache(o =>
{
o.Configuration = redis_connection_string;
o.InstanceName = "seminarmanager";
});
当然,我在我的应用程序中添加了两个来自nuget的包:
Microsoft.AspNetCore.DataProtection.StackExchangeRedis Microsoft.Extensions.Caching.StackExchangeRedis
不幸的是,分布式会话处理不起作用,我遇到了如下一系列错误:
system.security.cryptography.cryptographyException:在密钥环中找不到密钥{9b51134a-a57a-4129-9441-72859a985ab0}。
位于microsoft.aspnetcore.dataprotection.keymanagement.keyringbaseddataprotector.unprotectcore(byte[]protecteddata,boolean allowoperationsonrevokedkeys,unprotectstatus&status)
位于microsoft.aspnetcore.dataprotection.keymanagement.keyringbaseddataprotector.dangerousunprotect(byte[]protecteddata,boolean ignorerevocationerrors,boolean&requiresmigation,boolean&wasrecaded)
位于microsoft.aspnetcore.dataprotection.keymanagement.keyringbaseddataprotector.unprotect(byte[]protecteddata)
位于microsoft.aspnetcore.session.cookieprotection.unprotect(idataprotector保护程序、字符串保护文本、ilogger记录器)
microsoft.aspnetcore.session.sessionmiddleware:警告:取消保护会话cookie时出错。
在redis中,创建了密钥“dataprotection keys”,但没有值。
如何使用redis成功配置分布式会话/密钥管理?
致以最诚挚的问候。。。
1条答案
按热度按时间eiee3dmh1#
我自己找到了答案。我不得不从浏览器中删除所有现有的localhost cookies。在那之后,一切顺利。