Проверка подлинности cookie .NET Core с помощью AWS Lambda не сохраняется - PullRequest
1 голос
/ 28 апреля 2019

Я не могу заставить аутентификацию cookie-файлов работать с лямбда-функцией AWS с использованием .NET Core 2.1 MVC.

Я перепробовал множество вариантов параметров файлов cookie. Я могу войти в систему и увидеть, что в ответе создается файл cookie asp, но обычно я возвращаюсь на экран входа в систему после обновления или перехода по любой ссылке, например, следующий запрос к серверу. * Обновление. Похоже, что он находится в состоянии, когда мне нужно только дважды войти в систему сейчас, и он остается в системе. Это также вторая лямбда-функция, использующая .net 2.1, где я заметил такое поведение.

У меня есть API-шлюз, настроенный со значениями по умолчанию, которые устанавливаются при развертывании с использованием расширения AWS для visual studio.

Мой текущий код startup.cs, который работает на localhost:

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie(options =>
    {
        // Cookie settings
        options.Cookie.SameSite = SameSiteMode.Lax;
        options.Cookie.SecurePolicy = CookieSecurePolicy.SameAsRequest;
        options.LoginPath = "/Login";
        options.LogoutPath = "/Logout";
        options.AccessDeniedPath = "/Login";
        options.Cookie.Name = "myapp.auth";
        options.Cookie.HttpOnly = true;
        options.Cookie.Expiration = TimeSpan.FromDays(1);
    });

    services.ConfigureApplicationCookie(options =>
    {
        // Cookie settings, only this changes expiration
        options.SlidingExpiration = true;
        options.ExpireTimeSpan = TimeSpan.FromDays(1);
    });
services.AddAntiforgery(options => { options.Cookie.Expiration = TimeSpan.Zero; });

и

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Error");
        app.UseHsts();
    }

    app.UseHttpsRedirection();
    app.UseStaticFiles();
    app.UseCookiePolicy();
    app.UseAuthentication();

    app.UseMvc();
}

Я пытался использовать следующее при входе в систему:

    await HttpContext.SignInAsync(principal, new AuthenticationProperties
    {
        ExpiresUtc = DateTime.UtcNow.AddHours(12),
        IsPersistent = true
    });

Простое использование следующего позволит мне войти в систему, но мне придется дважды войти в систему, прежде чем файл cookie сохранится (еще раз после нажатия на что-либо и перенаправления для повторного входа в систему):

await HttpContext.SignInAsync(principal);
...