ASP.NET ASP.NET Core C# WEB API プログラミング

【 ASP.NET WebAPI 】Cookie を使用したログイン認証機能の実装方法


ASP.NET Core(.NET 6)でCookieを使用したログイン認証機能の実装方法を解説します。

今回はSPAのプロジェクトと仮定してWebAPI 側にログイン認証の機能を実装して解説したいと思います。

Program.cs の設定

以前までのバージョンでは、Program.cs以外に「Startup.cs」というファイルもあり、
そちらにCookie認証の定義を記述しているようでしたが、

ASP.NET Coreの.NET 6バージョンでは、Program.csファイルとStartup.csファイルは統合されてProgram.csのみになりました。
そのため、Cookie認証の定義は、Program.csに記述する必要があります。

以下がProgram.cs (一部抜粋) の実装内容となります。

// Cookie による認証スキームを追加する
builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseHttpsRedirection();

// Cookie認証実装に必要
app.UseAuthentication();
app.UseAuthorization();

app.MapControllers();

app.Run();

AddAuthentication メソッド、AddCookie メソッドを実装することでアプリケーションに対してCookie認証が必要となるように設定することが可能です。
AddAuthentication メソッドの引数では、
CookieAuthenticationDefaults.AuthenticationScheme を設定してください。

また、アプリケーションに認証機能を追加するために
app.UseAuthentication();
を app.UseAuthorization(); の前に記述しておいてください。

ログイン認証の実装

ログイン認証用のコントローラーがあると仮定して、そのコントローラー内でログイン認証がOKだった場合に
生成した認証Cookieをレスポンスに設定します。

namespace WebAPI.Controllers
{
    [ApiController]
    [Route("api/[controller]")]
    public class LoginController : ControllerBase
    {
        // ログイン
        [HttpPost]
        [AllowAnonymous]
        public async Task<IActionResult> Login([FromQuery] string loginName, [FromQuery] string password)
        {
            //ログイン認証判定
       if (// ログイン認証 == true)
            {
              // サインインに必要なプリンシパルを作る
              var claims = new[] { new Claim(ClaimTypes.Name, loginName) };
              var identity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
              var principal = new ClaimsPrincipal(identity);

              // 認証クッキーをレスポンスに追加
              await HttpContext.SignInAsync(principal);

              return Ok();
            }
            return BadRequest("ログイン認証 == false");
        }
    }
}

おすすめ記事はコチラ

ASP.NET Web Forms 1

この記事ではマイクロソフト社が開発・提供しているWebアプリケーション開発用フレームワーク「ASP.NET」の「Web Forms」を「MVC」と比較しながらメリットやデメリット等を含めて解説していき ...

C#VB 2

今回はC#(ver.7.0以降)、VB(ver. 15以降)でforeachループ内で繰り返し回数を参照する方法について解説していきます。 従来の記述方法とよりスマートに記述する方法の2通りを以下にな ...

3

この記事ではSQL Serverで使用できる「STUFF」という便利な関数の使い方について、解説していきます! 他にも便利な関数があれば、別記事にて使用方法を解説していきたいと思います! STUFF ...

4

今回はSQL ServerでデータをXML形式で取得する方法について書いていきます。 FOR XML PATH SQL Serverには「FOR XML PATH」という関数があって、SQL分の末尾に ...

-ASP.NET, ASP.NET Core, C#, WEB API, プログラミング
-, ,