簡體   English   中英

IE11 Cookie 身份驗證問題 - 多個站點,同一域

[英]IE11 Cookie Authentication Issues - Multiple Sites, Same Domain

設置場景
我遇到了一個非常獨特的場景,我的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 問題發生在重定向上。

謝謝你的幫助!

我在您的代碼片段中看到 SameSite 配置設置為無。

后來根據這些鏈接添加了對 IE11 下的 SameSite Cookies 的支持:

一種解決方法可能是將您的數據存儲在較舊的 IE11 版本應該支持的 localStorage 中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM