. NET Core (позади nginx) cook ie auth не работает в распределенной системе - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть. Net Core API за входом nginx kubernetes, я говорю с ним через интерфейс React в другом домене, который я очистил с помощью CORS.

Пример соответствующего кода в Startup.cs:

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
                .AddJwtBearer(
                  <XXXXXX>
                ).AddCookie(options =>
                {
                    options.Cookie.HttpOnly = true;
                    options.Cookie.SecurePolicy = _env.IsDevelopment()
                      ? CookieSecurePolicy.None : CookieSecurePolicy.Always;
                    options.Cookie.SameSite = SameSiteMode.None;
                });

services.Configure<CookiePolicyOptions>(options =>
            {
                options.MinimumSameSitePolicy = SameSiteMode.None;
                options.HttpOnly = HttpOnlyPolicy.Always;
                options.Secure = _env.IsDevelopment()
                  ? CookieSecurePolicy.None : CookieSecurePolicy.Always;
            });

services.AddCors(options =>
            {
                options.AddPolicy(name: AllowWebClientOrigin,
                    builder =>
                    {
                        builder.WithOrigins("<FRONT_END_URL>")
                            .AllowAnyHeader()
                            .AllowAnyMethod()
                            .AllowCredentials();
                    });
            });
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseCors(AllowWebClientOrigin);
app.UseCookiePolicy();

app.UseEndpoints.....

Проблема в том, что мои запросы не проходят проверку подлинности, когда я вхожу в систему и начинаю звонить. Я могу успешно войти в систему и получить повара ie, и я отправляю повара ie с каждым запросом, пробовал как по умолчанию, так и в качестве заголовка ("cook ie").

Он работает локально при тестировании, поэтому я подозреваю, что это может быть проблема, обнаруженная в моем nginx config.

Пример запроса и ответа в Chrome:

General:
Request URL: https://<API_DOMAIN>/account/me
Request Method: GET
Status Code: 302 
Remote Address: 45.79.60.107:443
Referrer Policy: no-referrer-when-downgrade

Response Headers:
access-control-allow-credentials: true
access-control-allow-headers: DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,Cookie
access-control-allow-methods: PUT, GET, POST, OPTIONS
access-control-allow-origin: https://<FRONT_END_CLIENT>
content-length: 0
date: Mon, 20 Apr 2020 16:25:16 GMT
location: https://<API_DOMAIN>/Account/Login?ReturnUrl=%2Faccount%2Fme
server: nginx/1.17.8
status: 302
strict-transport-security: max-age=15724800; includeSubDomains
vary: Origin

Request Headers:
:authority: <API_DOMAIN>
:method: GET
:path: /account/me
:scheme: https
accept: application/json, text/plain, */*
accept-encoding: gzip, deflate, br
accept-language: en-GB,en-US;q=0.9,en;q=0.8
cookie: .AspNetCore.Cookies=<COOKIE>
origin: <FRONT_END_CLIENT>
referer: <FRONT_END_CLIENT>
sec-fetch-dest: empty
sec-fetch-mode: cors
sec-fetch-site: same-site
user-agent: <XXXX>```
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...