【发布时间】:2020-10-30 00:30:23
【问题描述】:
设置场景
我遇到了一个非常独特的场景,我的ASPNet.SharedCookie 在代理下似乎在 IE11 中消失或改变。我会设置场景:
我们有 2 个网站托管在不同的服务器上,我们称之为:
第一个站点处理身份验证,它检查凭据并为域 .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