共享cookie身份验证未在服务器上进行身份验证

时间:2019-09-10 15:32:58

标签: c# asp.net cookies .net-core cookie-authentication

当部署两个共享身份验证cookie到Web服务器场环境的应用程序(一个.net 4.6和另一个.net core 2.2)时,“接收”应用程序不进行身份验证。我们有一个非常大的Web窗体应用程序,我们正试图最终迁移到.net核心,因此现在我们正在Web窗体应用程序中处理身份验证,并尝试与.net核心应用程序共享该身份验证。我们已将Web表单应用程序中的身份验证升级为基于OWIN / Katana cookie的身份验证。这些应用程序部署在同一站点(server.com/app1 server.com/app2)的相同服务器上。在本地一切正常,您登录一个并转移到另一个,然后仍然登录。当我们将服务器部署到负载平衡的服务器时,.net核心应用程序会接收cookie,但是isAuthenticated为false。

我已经能够在.net核心应用程序中手动解密cookie,并且能够打印出其中包含的声明,但是IsAuthenticated标志仍然为false。我尝试更改cookie域,cookie路径,安全策略和身份验证类型,但均未成功。

Web窗体应用程序Startup.cs:

var provider = DataProtectionProvider.Create(new DirectoryInfo(System.Configuration.ConfigurationManager.AppSettings["KeyRingLocation"]),
                                            (builder) => {
                                                builder.SetApplicationName("sharedApp");
                                                builder.PersistKeysToFileSystem(new DirectoryInfo(System.Configuration.ConfigurationManager.AppSettings["KeyRingLocation"]));
                                            });
            IDataProtector protector = provider.CreateProtector(
                                            "Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware",
                                            "Identity.Application",
                                            "v2");
            app.UseCookieAuthentication(new Microsoft.Owin.Security.Cookies.CookieAuthenticationOptions
            {
                CookieName = ".AspNet.SharedCookie",
                LoginPath = new PathString("/Login.aspx"),
                CookiePath = "/",
                AuthenticationType = "Identity.Application",
                CookieSecure = Microsoft.Owin.Security.Cookies.CookieSecureOption.Always,
                CookieDomain = System.Configuration.ConfigurationManager.AppSettings["CookieDomain"],
                TicketDataFormat = new AspNetTicketDataFormat(new DataProtectorShim(protector)),
                CookieManager = new ChunkingCookieManager()
            });

.net核心应用程序Startup.cs:

services.AddDataProtection()
                .SetApplicationName("sharedApp")
                .PersistKeysToFileSystem(new DirectoryInfo(Configuration.GetSection("KeyRingLocation").Value));

            services.AddAuthentication("Identity.Application")
                .AddCookie("Identity.Application", options =>
                {

                    options.Cookie.Name = ".AspNet.SharedCookie";
                    options.Cookie.Domain = Configuration.GetSection("CookieDomain").Value;
                    options.Cookie.Path = "/";
                    options.Cookie.SecurePolicy = CookieSecurePolicy.Always;
                });

网络表单登录代码:

            ...
            var auth = Context.GetOwinContext().Authentication;
            var identity = new ClaimsIdentity("Identity.Application");
            identity.AddClaim(new Claim(ClaimTypes.Name, profile.UserName));
            ...
            auth.SignIn(identity);

没有引发任何错误,因此很难确定问题所在。我希望它会像在本地运行一样尊重身份验证cookie,但是用户身份为null,isAuthenticated为false。

0 个答案:

没有答案