プロジェクト構築手順
認証方式選択時に「個人アカウント」を指定することで、SQL Server用の接続文字列が自動生成されます。
認証サービス構成方法の比較
- AddIdentity
- ユーザー管理機能やパスワードポリシーなど、認証機能の全般をカスタマイズ可能
- Entity Framework Coreの設定やCookie認証の構成を明示的に指定する必要あり
- 柔軟性が高いが設定作業が複雑化する傾向
- AddDefaultIdentity
- Entity Framework CoreとCookie認証を標準設定で自動構成
- アカウント確認機能やセキュリティ設定がデフォルトで有効化
- 迅速な実装を求めるケースに最適
サービス登録のコード例
using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using WebApp.Data;
var builder = WebApplication.CreateBuilder(args);
// データベース設定
var connection = builder.Configuration.GetConnectionString("DefaultConnection");
builder.Services.AddDbContext<AppDbContext>(options =>
options.UseSqlServer(connection));
builder.Services.AddDatabaseDeveloperPageExceptionFilter();
// 認証サービス構成
builder.Services.AddDefaultIdentity<IdentityUser>(configureOptions: opts => {
opts.SignIn.RequireConfirmedAccount = true;
})
.AddEntityFrameworkStores<AppDbContext>();
builder.Services.AddControllersWithViews();
プロジェクト構成要素
自動生成されるプロジェクトには以下のNuGetパッケージが含まれます:
- Microsoft.AspNetCore.Identity.EntityFrameworkCore
- Microsoft.EntityFrameworkCore.SqlServer
- Microsoft.AspNetCore.Identity.UI
スキャフォールディング生成後の実装
基幹となる認証機能はAreas/Identity配下に配置されます。以下はナビゲーションバーの実装例:
@using Microsoft.AspNetCore.Identity
@inject SignInManager<IdentityUser> SignInManager
@inject UserManager<IdentityUser> UserManager
<ul class="navbar-nav">
@if (SignInManager.IsSignedIn(User))
{
<li class="nav-item">
<a class="nav-link text-dark"
asp-area="Identity"
asp-page="/Account/Manage/Index"
title="Manage">@User.Identity?.Name でログイン中</a>
</li>
<li class="nav-item">
<form method="post"
asp-area="Identity"
asp-page="/Account/Logout">
<button type="submit" class="nav-link btn btn-link text-dark">ログアウト</button>
</form>
</li>
}
else
{
<li class="nav-item">
<a class="nav-link text-dark" asp-area="Identity" asp-page="/Account/Register">登録</a>
</li>
<li class="nav-item">
<a class="nav-link text-dark" asp-area="Identity" asp-page="/Account/Login">ログイン</a>
</li>
}
</ul>