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 おすすめ入門講座

3つのWebアプリケーションの開発を通して、ASP.NETについて基礎から学べるおすすめの入門講座がこちら☟

【入門者向け】ASP.NET MVCでWebアプリ開発のノウハウを学ぼう!

icon

おすすめ記事はコチラ

スマレジ テックファーム 1

スマレジ テックファーム で Webエンジニアとして勤めている tomoです。 今回は株式会社スマレジや私が所属している 「 スマレジ テックファーム 」についてPRしていきたいと思います。 スマレジ ...

2

FromBody 属性を使用して、 ASP.NET Core(.NET 6)のWebAPIでBodyパラメータのJSONを受け取る方法を解説します。 FromBody 属性 POSTやGETで呼び出さ ...

PC picture 3

ASP.NET Core(.NET 6)でCookie認証のタイムアウトを設定する方法を解説します。 Cookieの有効期限について Cookieには通常はタイムアウト(有効期限)を設定します。 基本 ...

4

ASP.NET Core(.NET 6)でクロスオリジンリクエスト ( CORS )を設定する方法を解説します。 簡単に クロスオリジンリクエスト ( CORS )とは何かについても少し解説したいと思 ...

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