.NET Core 2.1 MVC を使用して AWS Lambda 関数で動作する Cookie 認証を取得できません。
私はクッキーオプションのバリエーションをたくさん試しました. ログインして、応答で作成されている asp Cookie を確認できますが、通常は、サーバーへの次の要求など、リンクを更新またはクリックすると、ログイン画面に戻ります。*更新: 最初に 2 回ログインするだけで、ログインしたままの状態になっているようです。これは、.net 2.1 を使用した 2 番目の Lambda 関数でもあり、この動作に気付きました。
Visual Studio の AWS 拡張機能を使用してデプロイするときに設定されるデフォルトで API ゲートウェイを構成しました。
localhost で動作する現在の startup.cs コード:
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 が保持されるまでに 2 回ログインする必要があります (何かをクリックして再度ログインするようにリダイレクトされた後、もう一度ログインします)。
await HttpContext.SignInAsync(principal);