Skip to content

MS_ASPNETCoreIdentity

nishi_74322014 edited this page Aug 12, 2026 · 1 revision

ASP.NET Core Identity

概要

  • ASP.NET Identity(Identity 2.0)(net45)はメンテナンス・フェーズ
  • 新規採用時は、ASP.NET Core Identity(Identity 3.0)(netcore)の使用を検討。

補足(最新化): 「Identity 3.0」という呼称は初期のもので、
現在は ASP.NET Core のバージョンに追従する
(ASP.NET Core 8 / 9 の Identity、という言い方をする)。
リポジトリも aspnet/Identity から dotnet/aspnetcore に統合された。

また、.NET 8 以降は次が加わっている。

追加 内容
Identity API エンドポイント MapIdentityApi<TUser>() で、SPA / モバイル向けの登録・ログイン API が 1 行で生える
パスキー対応 .NET 10 で Web Authentication API がサポートされた
Blazor 用テンプレート 個別アカウント認証のスキャフォールドが Blazor に対応

ただし、Identity API エンドポイントは OAuth / OIDC の
代替ではない
(Bearer トークンは独自形式で、外部 RP に配れない)。
STS が必要なら後述の Community STS を使う。

詳細

互換性

ASP.NET Identity(Identity 2.0)(net45)と、
OpenID / OAuth / OpenID Connectが分かっていれば差分の知識で済む。

新機能

2要素認証

  • 既存の SMS を用いた 2 要素認証に加えて、
  • TOTPの二要素認証機能が追加されている。
    • QR コード(DNET_QRCode.md)の生成には、qrcode.js を使用する。
    • TOTPには、各種 Authenticator app を使用する。
      • Google Authenticator app
      • Microsoft Authenticator app

補足(最新化): SMS による 2 要素認証は非推奨である
(NIST SP 800-63B は SMS を "restricted" と位置づけている)。
SIM スワップ・SS7 の傍受・端末の通知プレビューといった経路で
コードが第三者に渡りうる。

強度は次の順である。

SMS  <  TOTP(Authenticator アプリ)  <  FIDO2 / パスキー

新規実装は、TOTP を最低ラインとし、
FIDO2 / パスキー(Web Authentication API)を
目標にする
のが望ましい。

STS機能

その他

基本的な画面の追加方法

方式
2.0 まで 従来通り、MVC のビューが追加される。ただし Razor ではなく Tag ヘルパー(ASP.NET Core MVC)を使用する。
2.1 から 従来の MVC のビューが追加されなくなっている。Razor Class Library により提供され、スキャフォールドで追加できる。
  • Razor
    • とは言え、Razor でも OK。
    • 汎用認証サイトでは、ASP.NET Identity の Razor 画面を移植できた。

補足: 2.1 以降の既定は
Microsoft.AspNetCore.Identity.UI(Razor Class Library)であり、
画面はアセンブリに埋め込まれていてプロジェクトには見えない

カスタマイズしたい画面だけを

dotnet aspnet-codegenerator identity -dc MyDbContext --files "Account.Login;Account.Register"

のように部分的にスキャフォールドして上書きするのが定石である。
全部出すと、フレームワークの更新に追従できなくなる。

管理画面の追加方法

補足: 現在も管理画面は提供されていない(自作するしかない)。
UserManager<TUser> / RoleManager<TRole> の API を使って
自分で作る前提になっている。

管理が本格的に必要なら、
Microsoft Entra ID や Keycloak のような
IdP 製品に寄せる判断も検討に値する。

Entity Framework前提の解除

  • 2.0 と同じように、解除可能。
  • 詳しくは後述を参照。

マイグレーション(移行)

ASP.NET Identity(Identity 2.0)(net45)から、
ASP.NET Core Identity(Identity 3.0)(netcore)は、
マイグレーション(移行)というより再構築に近い

互換性が低い

  • 移行情報もあるが、そもそも、

    • ASP.NET と ASP.NET Core の互換性がそれほど高くない
      ASP.NET Coreへの移行)のだが、
    • 以下の点も加えて、互換性は、あまり高くない。
  • 互換性の問題点

    • ASP.NET Core Identity は、
      .NET Standardレイヤではなく
      .NET Coreレイヤ
    • IUser インタフェースの廃止などがあり、
      ApplicationUserApplicationRole が継承するクラスが異なる。
    • メソッド・シグネチャが異なる。
      • IUserStoreIRoleStore
      • UserManagerRoleManagerSignInManager
  • とは言え、汎用認証サイトでは

    の両方をサポートしている(為せば成る的な)。

補足(データ移行で最も重要な点): パスワード ハッシュは移行できる
PasswordHasher<TUser> は互換モードを持ち、
Identity 2.0 の形式(PasswordHasherCompatibilityMode.IdentityV2)を
検証できる。ユーザにパスワード再設定を強いる必要はない。

一方、次は移行時に必ず引っかかる

項目 注意
NormalizedUserName / NormalizedEmail Core で新設された列。ToUpperInvariant() した値を投入しないとログインできない
ConcurrencyStamp 新設。NULL だと更新時に例外になることがある
SecurityStamp 引き継がないと既存 Cookie が全部失効する(それが望ましい場合もある)
Cookie 認証チケット 形式が非互換。移行時に全員再ログインになる

「移行後、誰もログインできない」の原因はほぼ NormalizedUserName である。

機能追加

  • 2 要素認証に新しい機能が追加されている。
  • STS 機能(フレームワーク)が刷新されている。

参考

Razor Class Library

Entity Framework前提の解除

上級者は基本 EF(Entity Framework Core(MS_EntityFrameworkCore.md))キャンセル
(RDB ⇔ NoSQL、LDAP 切り替え等が必要な場合の考慮)。

補足(どこまで実装するか): EF を外す場合、
必要なインタフェースだけを実装すればよい。全部は要らない。

インタフェース 必要になる場面
IUserStore<TUser> 必須
IUserPasswordStore<TUser> ローカル パスワード認証をする
IUserEmailStore<TUser> メール確認・パスワード リセット
IUserRoleStore<TUser> ロールを使う
IUserLoginStore<TUser> 外部ログインを使う
IUserSecurityStampStore<TUser> セッション失効を効かせる(実質必須)
IUserTwoFactorStore<TUser> / IUserAuthenticatorKeyStore<TUser> 2FA を使う
IUserLockoutStore<TUser> ロックアウトを使う

実装していないインタフェースの機能を呼ぶと
NotSupportedException になるため、
使う機能から逆算して選ぶのが正しい。

Microsoft Learn

時が癒す

ネスケラボ

ASP.NET Core Identity の 外部ログイン

ASP.NET Identityの外部ログインも参照)

Microsoft Learn

Okta

OneLogin

マイグレーション(移行)

Microsoft Learn

認証

承認

その他

present

ONE-RUN

補足(パスワード ハッシュ): ASP.NET Core Identity の既定は
PBKDF2-HMAC-SHA256IdentityV3 形式)である。
.NET 8 で既定の反復回数が 10 万回に引き上げられた。

Bcrypt / Argon2 に替えたい場合は IPasswordHasher<TUser> を差し替える。
ただし、既存ハッシュの検証も通せるようにしておかないと
全ユーザがログインできなくなる(検証時に旧形式を判別し、
成功したら新形式で保存し直す「段階的な再ハッシュ」が定石)。


Tags: 移行, .NET開発, .NET Core, ASP.NET, ASP.NET MVC, ASP.NET Identity, 認証基盤, セキュリティ

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally