设置场景
我正在遇到一个非常独特的场景,在代理下,我的ASPNet.SharedCookie
在IE11中似乎正在消失或改变。我将设置场景:
我们有两个网站托管在不同的服务器上,让我们致电:
- https://login.mydomain.com
- https://product.mydomain.com
第一个网站处理身份验证,检查凭据并为域.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的问题正在重定向上。
感谢您的任何帮助!
我在您的代码片段中看到了Samesite配置设置为无。
随后根据这些链接添加了IE11下的Samesite cookie的支持:
- https://docs.w3cub.com/browser_support_tables/same-siete-cookie-attribute/
- https://caniuse.com/same-site-cookie-attribute
解决方法可能是将您的数据存储在localstorage中,该数据应由较旧的IE11版本支持。