【问题标题】:IE11 Cookie Authentication Issues - Multiple Sites, Same DomainIE11 Cookie 身份验证问题 - 多个站点,同一个域
【发布时间】:2020-10-30 00:30:23
【问题描述】:

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

我们有 2 个网站托管在不同的服务器上,我们称之为:

  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 的问题发生在重定向上。

感谢您的帮助!

【问题讨论】:

  • 基于对客户端策略的严格限制,他们的IE是否有“不允许cookie”标志?
  • 不就是Citrix configuration的问题吗?
  • @Steve 我不确定,我忘记提及的另一件事是,以前该产品将在同一站点内拥有自己的登录名。按预期工作的地方。
  • @ThePower IE 我认为不同的域是第三方。它有愚蠢的 p3p 标准,可能会根据安全级别阻止 cookie
  • @Steve 这是同一个域,只是不同的站点。

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


【解决方案1】:

我在您的代码 sn-p 中看到 SameSite 配置设置为 None。

后来根据这些链接添加了对 IE11 下的 SameSite Cookie 的支持:

解决方法是将数据存储在 localStorage 中,旧 IE11 版本应该支持。

【讨论】:

    猜你喜欢
    • 2017-01-17
    • 1970-01-01
    • 2013-11-29
    • 2016-03-24
    • 1970-01-01
    • 1970-01-01
    • 2011-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多