ASP.NET CoreのCookie認証を完全ガイド!初心者でもわかるログインの仕組み
生徒
「Webサイトでログインして、次にページを開いてもログイン状態が続くのはなぜですか?」
先生
「それはCookie認証という仕組みを使って、ログインした情報をブラウザに覚えてもらっているからです。」
生徒
「Cookieって聞いたことはありますが、ASP.NET Coreではどうやって使うんですか?」
先生
「ASP.NET Coreには、Cookie認証を簡単に実装できる仕組みが用意されています。順番に見ていきましょう。」
1. Cookie認証とは?ASP.NET Coreでの役割
Cookie認証とは、ログインしたことをブラウザに保存しておく仕組みです。Webサイトはページを移動するたびに、基本的には毎回新しくアクセスされます。そのため、何もしないと「誰がアクセスしているか」を忘れてしまいます。
そこで使われるのがCookieです。Cookieは、ブラウザに小さなメモを保存するような仕組みで、「この人はログイン済み」という情報を記録できます。ASP.NET Coreでは、このCookieを使った認証機能が標準で用意されており、安全にログイン機能を作ることができます。
2. ASP.NET CoreでCookie認証を使うメリット
ASP.NET CoreのCookie認証は、初心者にも扱いやすいのが特徴です。特別な暗号処理を自分で書かなくても、フレームワークが自動で安全に管理してくれます。
また、企業の業務システムや管理画面など、「ログインして使うWebアプリケーション」でよく利用されます。OAuthやJWTのような少し難しい認証方式を学ぶ前に、まずはCookie認証を理解することが大切です。
3. Cookie認証の基本的な流れ
Cookie認証の流れはとてもシンプルです。まず、ユーザーがログイン画面でIDとパスワードを入力します。次に、サーバー側で「正しいかどうか」を確認します。
正しい場合、サーバーは「ログイン成功」の証明書のような情報を作り、それをCookieとしてブラウザに渡します。以降のアクセスでは、ブラウザがそのCookieを毎回送るため、サーバーは「この人はログイン済み」と判断できます。
4. ASP.NET CoreでCookie認証を有効にする設定
まずは、ASP.NET CoreでCookie認証を使うための設定を行います。これはProgram.csで行います。難しく見えますが、「Cookie認証を使います」と宣言しているだけです。
using Microsoft.AspNetCore.Authentication.Cookies;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options =>
{
options.LoginPath = "/Account/Login";
});
var app = builder.Build();
app.UseAuthentication();
app.UseAuthorization();
app.MapControllers();
app.Run();
LoginPathは、「ログインしていない人がアクセスしたときに表示する画面」を指定しています。これにより、自動的にログイン画面へ誘導されます。
5. ログイン処理でCookieを発行する方法
次に、実際にログインしたときにCookieを作成する処理です。コントローラーでログイン成功時にサインイン処理を行います。
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.Cookies;
using System.Security.Claims;
public async Task<IActionResult> Login()
{
var claims = new List<Claim>
{
new Claim(ClaimTypes.Name, "sampleUser")
};
var identity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
var principal = new ClaimsPrincipal(identity);
await HttpContext.SignInAsync(
CookieAuthenticationDefaults.AuthenticationScheme,
principal
);
return RedirectToAction("Index", "Home");
}
Claimとは、「このユーザーは誰か」という情報を表す名札のようなものです。ここではユーザー名だけを保存していますが、必要に応じて増やすこともできます。
6. 認証が必要なページを制限する方法
ログインしていない人に見せたくないページには、Authorize属性を付けます。これだけで、ログイン済みの人だけがアクセスできるようになります。
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
[Authorize]
public class HomeController : Controller
{
public IActionResult Index()
{
return View();
}
}
もしログインしていない状態でアクセスすると、自動的にログイン画面へ移動します。これがCookie認証の便利なポイントです。
7. ログアウト処理の実装方法
最後にログアウト処理です。ログアウトでは、保存されているCookieを削除します。これにより、ログイン状態が解除されます。
public async Task<IActionResult> Logout()
{
await HttpContext.SignOutAsync(
CookieAuthenticationDefaults.AuthenticationScheme
);
return RedirectToAction("Login", "Account");
}
この処理を実行すると、次のページアクセスからはログインしていない状態になります。ブラウザに保存されていたメモを消すイメージです。
8. Cookie認証を理解することの重要性
Cookie認証は、ASP.NET CoreでWebアプリケーションを作る上での基本中の基本です。ログイン機能は多くのシステムで必要になるため、この仕組みを理解しておくことで、実用的なアプリケーションを作れるようになります。
難しそうに見えても、実際は「ログイン情報をCookieに保存して確認する」というシンプルな考え方です。まずはこの仕組みをしっかり理解することが大切です。