设置场景
我正在经历一个非常独特的场景,在代理下,我的ASPNet.SharedCookie
似乎在IE11中消失或改变。我将设置场景:
我们有两个托管在不同服务器上的网站,我们可以打电话给他们:
第一个网站处理身份验证,它会检查凭据并为域.mydomain.com
设置Cookie。这对99%的场景都很有效(我们拥有庞大的用户群)。
问题
我们有1个用户使用Citrix,因此他们通过代理访问产品,他们无法控制浏览器版本。他们必须使用IE11。
因此,他们访问login.mydomain.com,输入他们的凭据并对cookie进行身份验证和设置,然后将其重定向到product.mydomain.com。但是,当他们访问这个网站时,cookie似乎没有或者似乎已被更改(我无法找到确切因为他们无法在他们的计算机上看到cookie),从我们知道的日志中我知道我们得到以下内容:
Authorization failed for user: null.
Authorization failed for the request at filter 'Microsoft.AspNetCore.Mvc.Authorization.AuthorizeFilter'.
以前有没有人经历过这个?就像我说它适用于群众一样,但对于这种独特的情况,我们遇到了困难。
细节
登录站点的启动:
// Was previously services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme) but the issue still occurred
services.AddAuthentication(options =>
{
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;
})
.AddCookie(options => {
var protectionProvider = DataProtectionProvider.Create(new DirectoryInfo(Config.KeyLocation));
var dataProtector = protectionProvider.CreateProtector("Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware", "Cookie", "v2");
var ticketFormat = new TicketDataFormat(dataProtector);
options.ClaimsIssuer = MyIdentity.AuthType;
options.TicketDataFormat = ticketFormat;
options.Cookie.Name = Config.CookieName;
options.Cookie.SecurePolicy = CookieSecurePolicy.Always;
options.Cookie.Domain = Config.Domain;
options.Cookie.Expiration = TimeSpan.FromMinutes(Config.Expiration);
options.Cookie.SameSite = SameSiteMode.None;
options.ExpireTimeSpan = TimeSpan.FromMinutes(Config.ExpireTimeMins);
options.SlidingExpiration = true;
options.Events = new CookieAuthenticationEvents()
{
OnRedirectToLogin = ctx =>
{
ctx.Response.Redirect(Config.Login);
return Task.FromResult<object>(null);
}
};
});
我也在呼叫service.AddDataProtection
和.PersistKeysToFileSystem
如果我应该为产品添加启动代码,请告诉我,不确定它是否有任何区别,因为我认为重定向会发生cookie的问题。
感谢您的帮助!
答案 0 :(得分:0)
我在您的代码段中看到SameSite配置被设置为None。
此后,根据以下链接添加了对IE11下SameSite Cookies的支持:
一种解决方法是将您的数据存储在localStorage中,这应由较旧的IE11版本支持。