ASP.NET Core Identityで認証エラーの時に401を返す(ASP.NET Core 2.0)

WebAPIを作っているときに、未ログインだったら401を返して欲しいと思ったのですが、ASP.NET Coreでは302でログインページへリダイレクトするという、親切設定がデフォルトとなっています。
色々調べていたら

ASP.NET Core Identityで認証エラーの時に401を返す

とすでに調べている方がいました。
・・・ですが、ASP.NET Core 2.0ではこの方法は使えません。

調べてようやくわかったので、忘れないようメモがてらに書いていきます。

401を返すための設定(Startup.cs)

下記のようにStartup.csのConfigureServicesでConfigureApplicationCookieを使います。
ここでOnRedirectToLoginのイベントを記述するだけで401が返せるようになります。

public void ConfigureServices(IServiceCollection services)
{
    /*
      ~省略~
    */

    services.AddIdentity<ApplicationUser, IdentityRole>()
        .AddEntityFrameworkStores<ApplicationDbContext>()
        .AddDefaultTokenProviders();
    services.ConfigureApplicationCookie(o =>
    {
        o.Events.OnRedirectToLogin = (context) => { context.Response.StatusCode = StatusCodes.Status401Unauthorized; return Task.CompletedTask; };
    });

    /*
      ~省略~
    */

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.