【问题标题】:ASP.NET Core Shared Cookie IssueASP.NET Core 共享 Cookie 问题
【发布时间】:2020-06-02 20:44:08
【问题描述】:

我已经阅读了关于 SO.... 的 MS 说明和几个线程,但我没有想法。我有 2 个 .net core 3.0 Web 应用程序。我使用 Okta 进行身份管理,并希望能够在我的应用程序之间进行 SSO - 这一切都可以在本地正常运行。

但是,当我将它部署到 Azure 中的开发环境时,它不起作用,因为站点 1 写入的 cookie 无法被站点 2 读取。我想,哦,当然,解决方案是修复 cookie 域。但这也没有用。

这就是我所在的地方:

站点一:dev-app.mysite.com 站点二:dev.mysite.com

如果我没有明确设置 cookie 域,站点 1 将写入 cookie,并将 dev-app.mysite.com 作为 cookie。

如果我 确实 将 cookie 域明确设置为“.mysite.com”(根据文档),那么我有一个更大的问题 - 即站点 1 在全部!

这是相关代码(两个应用程序相同)

            services.Configure<CookiePolicyOptions>(options =>
            {
                // This lambda determines whether user consent for non-essential cookies is needed for a given request.
                options.CheckConsentNeeded = context => true;
                options.MinimumSameSitePolicy = Microsoft.AspNetCore.Http.SameSiteMode.None;
                options.Secure = CookieSecurePolicy.Always;
            });

以及我设置身份验证 cookie 的位置:

            services.AddAuthentication(options =>
            {
                options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            })
            .AddCookie(options =>
            {
                options.LoginPath = new PathString("/Account/SignIn");
                options.Cookie.Name = cookieName;
                options.Cookie.Domain = cookieDomain;
            })
            .AddOktaMvc(oktaMvcOptions);

请注意,我已经处理了 cookie 应用程序名称、共享数据保护密钥等。唯一阻碍这一点的是域问题。

【问题讨论】:

    标签: asp.net-core cookies


    【解决方案1】:

    这可能是我见过的最奇怪的事情。我发现如果我这样做,它会起作用:

    options.Cookie.Domain = "mydomain.com";
    

    但是,如果我将相同的值放入 appSettings.json 并从那里读取它。相同的 exact 值,它不起作用。

    我在本地调试它,发现不知何故我的变量:

                    var cookieName = Configuration.GetValue<string>("SharedCookies:CookieName");
    
    

    这是在调用之前声明的,超出了我使用它的范围......即使我在它旁边声明的变量完全没问题。我不知道这怎么可能,所以我想我会尝试移动声明:

                services.AddAuthentication(options =>
                {
                    options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                    options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                    options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                })
                .AddCookie(options =>
                {
                    var cookieDomain = Configuration.GetValue<string>("SharedCookies:CookieDomain");
                    var cookieName = Configuration.GetValue<string>("SharedCookies:CookieName");
    
                    options.LoginPath = new PathString("/Account/SignIn");
                    options.Cookie.Name = cookieName;
                    options.Cookie.SameSite = Microsoft.AspNetCore.Http.SameSiteMode.None;
                    options.Cookie.Domain = cookieDomain;
                    options.Cookie.SecurePolicy = CookieSecurePolicy.Always;
                })
                .AddOktaMvc(oktaMvcOptions);
    
    

    而且...不,仍然无法正常工作。我可以让它工作的唯一方法是直接输入域。如果我逐行遍历代码,我会将其设置为与变量相同的值。这太奇怪了。

    如果有人对此有任何想法,请告诉我。

    【讨论】:

      猜你喜欢
      • 2020-08-28
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 2018-12-20
      • 2018-02-17
      • 2018-08-25
      • 2011-11-27
      • 2020-11-20
      相关资源
      最近更新 更多