ASP. NET Core Shared Cook ie Проблема - PullRequest
       2

ASP. NET Core Shared Cook ie Проблема

0 голосов
/ 18 февраля 2020

Я прочитал инструкции MS и несколько тем здесь на SO .... и у меня нет идей. У меня есть 2. net core 3.0 веб-приложения. Я использую Okta для управления идентификацией и хочу иметь возможность единого входа между моими приложениями - что локально все прекрасно работает.

Однако, когда я развертываю его в своей среде разработки в Azure, он не работает потому что куки, записанные сайтом 1, не могут быть прочитаны сайтом 2. Я подумал, о, конечно, решение состоит в том, чтобы просто исправить домен cook ie. Но это тоже не сработало.

Так вот, где я нахожусь:

Сайт один: dev-app.mysite.com Сайт два: dev.mysite.com

Если я не укажу явно домен повара ie, сайт 1 напишет повара ie с dev-app.mysite.com в качестве повара ie.

Если я do явно задайте для домена cook ie значение «.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;
            });

и где я устанавливаю повар аутентификации ie:

            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);

Примечание. Я уже позаботился о имя приложения cook ie, общие ключи защиты данных и т. д. c. Единственное, что сдерживает это, - это проблема домена.

1 Ответ

0 голосов
/ 18 февраля 2020

Это может быть самая странная вещь, которую я когда-либо видел. Я обнаружил, что если я делаю это, это работает:

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

Однако, если я добавлю это же значение в appSettings. json и прочту его оттуда. То же самое точное значение, оно не работает.

Я отладил его локально и обнаружил, что моя переменная каким-то образом:

                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);

И ... Нет, все еще не работает. Единственный способ заставить его работать, это ввести домен напрямую. Если я перебираю код построчно, я устанавливаю то же значение, что и для переменной. Это так странно.

Если у кого-то есть идеи, как это возможно, пожалуйста, дайте мне знать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...