IE11 Cookie身份验证问题 - 多个站点,相同的域



设置场景
我正在遇到一个非常独特的场景,在代理下,我的ASPNet.SharedCookie在IE11中似乎正在消失或改变。我将设置场景:

我们有两个网站托管在不同的服务器上,让我们致电:

  1. https://login.mydomain.com
  2. 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版本支持。

相关内容

  • 没有找到相关文章

最新更新