0

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

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

  1. https://login.mydomain.com
  2. https://product.mydomain.com

第一个站点处理身份验证,它检查凭据并为域设置 cookie .mydomain.com。这在 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 的问题发生在重定向上。

谢谢你的帮助!

4

1 回答 1

0

我在您的代码片段中看到 SameSite 配置设置为无。

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

一种解决方法可能是将您的数据存储在 localStorage 中,旧 IE11 版本应支持该数据。

于 2020-10-29T16:30:23.947 回答