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アプリ開発のノウハウを学ぼう!