我有两个应用程序(在同一个域中):第一个在Nodejs上创建(express-session),第二个在.Net Core上创建。 登录提供商是1个应用程序。
2应用程序-获取身份验证Cookie,必须启动会话。会话缓存保存到Mongodb中。 现在2个应用程序运行良好。但是它总是使用加密密钥重新创建cookie。在Mongodb会话中保存的密钥未加密。
哪里有问题?当用户想要返回1个应用程序时,他会看到登录页面。因为1个应用无法识别加密的Cookie密钥。
我认为最好的方法-在2个应用中禁用cookie密钥加密。
在我看来(对不起,我是初学者),使用加密工程服务。AddDataProtection()。
public class AppDistributedSessionStore : ISessionStore
{
DistributedSessionStore innerStore;
IStartSession startSession;
public AppDistributedSessionStore(IDistributedCache cache,
ILoggerFactory loggerFactory, IStartSession startSession)
{
innerStore = new DistributedSessionStore(cache, loggerFactory);
this.startSession = startSession;
}
public ISession Create(string sessionKey, TimeSpan idleTimeout, TimeSpan ioTimeout, Func<bool> tryEstablishSession, bool isNewSessionKey)
{
// temp
sessionKey = "Sfdfd_fddddufd45454dfdfdfre.WFCpMxXnpfdfdfdf7878dfdf7d8fd";
ISession session = innerStore.Create(sessionKey, idleTimeout, ioTimeout,
tryEstablishSession, isNewSessionKey);
if (isNewSessionKey)
{
startSession.StartSession(session);
}
return session;
}
}
Startup.cs
services.AddSingleton<IStartSession, InitSession>();
services.AddSingleton<ISessionStore, AppDistributedSessionStore>();
services.AddSession(o =>
{
o.Cookie.Name = "app_session";
o.Cookie.Path = "/";
o.Cookie.IsEssential = true;
});
services.AddMongoDbCache(options =>
{
options.ConnectionString = Configuration.GetSection("NoSqlSettings")["ConnectionString"];
options.DatabaseName = "appdb";
options.CollectionName = "sessions";
options.ExpiredScanInterval = TimeSpan.FromMinutes(10);
});
2的应用始终把新的cookie与加密的密钥,如:CfDJ8LDy%2F5e6ELtApkua%2Bim6shYlqsO8GwVMf%2FKtOGSJzr6tCS8c%2BvIMG%2FopD%2BWrclJin07WBDSwRp66TPeDTCFI4Mu%2BWn2RsYY06JsvkQAqRIVXc0TZBIGOKGzqD1KouKLpv%2F9m63z2tUsA2plTddJj6j6oewul4z%2FnrL4GUFJ1XM%2BWW
如何停止加密密钥?我想查看带有密钥的Cookie:“ Sfdfd_fddddufd45454dfdfdfre.WFCpMxXnnpdfdfdf7878dfdf7d8fd”