Skip to content

MS_ASPNETIdentity

nishi_74322014 edited this page Aug 4, 2026 · 1 revision

ASP.NET Identity

概要

  • ASP.NET Forms認証 ではなく、
    OWIN の認証用ミドルウェア(Owin.Security)を使用している。
  • 特に、ソーシャルログインを行う場合、OWIN で提供されるライブラリを使用する必要がある。
    • Microsoft.Owin.Security.OAuth
    • Microsoft.Owin.Security.Facebook
    • Microsoft.Owin.Security.Twitter
    • Microsoft.Owin.Security.Google
    • Microsoft.Owin.Security.MicrosoftAccount

補足(最新化): 本ページは .NET Framework の ASP.NET Identity 2.x (OWIN ベース)についての内容である。 ASP.NET Core では ASP.NET Core Identity に置き換わっており、 OWIN への依存は無くなっている。

ASP.NET Identity 2.x ASP.NET Core Identity
基盤 OWIN(Microsoft.Owin.Security.* ASP.NET Core の認証ミドルウェア
外部ログイン Microsoft.Owin.Security.Facebook Microsoft.AspNetCore.Authentication.*
DI 手動(OwinContext から取得) 標準の DI
UI スキャフォールドされたページ Identity UI(Razor クラス ライブラリ)

名前は似ているが別物で、コードはそのまま移植できない。

特徴

特徴 内容
One ASP.NET Identity System ASP.NET frameworks(MVC, Web Forms, Web Pages, Web API, SignalR)で使用可能
ユーザ属性の拡張 Entity Framework のコード ファーストを使用し、拡張可能
UserStore のストレージ変更 既定は EF Code First。UserStore クラスを実装すればストレージを変更可能
ユニットテスト容易性 インターフェイス分離により差し替えやすい
シンプルなロールプロバイダ 「管理者」等のロールを作成し、ロールにユーザを追加できる
外部ログイン Microsoft アカウント、Facebook、Twitter、Google などを簡単に追加できる
セキュアトークンサービス(STS) OAuth 2.0 の STS をサポート

機能

基本機能

  • サインアップ
  • サインイン・サインアウト
  • アカウントの編集
    • パスワード/電話番号/二要素認証 (2FA) の ON/OFF/外部ログインの一覧と削除
    • , etc.(任意項目を追加可能)

新機能

分類 機能
サインアップの機能強化 ユーザ名の重複不可設定/パスワード検証/二要素認証 (2FA)/アカウント確認(E-mail confirmation)
サインアップ・サインインの機能強化 外部ログイン/セキュアトークンサービス(STS)
運用系機能強化 パスワード・リセット
セキュリティ強化 アカウント・ロックアウト/SecurityStamp
管理機能 アカウント編集・削除/ロール編集・削除

補足: SecurityStamp は理解しておく価値がある。 ユーザのセキュリティに関わる情報(パスワード、外部ログイン、2FA 設定)が 変わるたびに更新されるランダム値で、 Cookie 認証チケットに埋め込まれる。

ミドルウェアが定期的にこれを検証することで、 パスワード変更時に他端末のセッションを無効化できる。 JWT の補足で触れた「署名付きトークンは取り消せない」問題に対する、 Cookie 方式ならではの解である。

ASP.NET Core Identity では options.SecurityStampValidationInterval(既定 30 分)で検証間隔を設定する。

資格情報へのアクセス

EntityFramework

Entity Framework(MS_EntityFramework.md)(Microsoft.AspNet.Identity.EntityFramework)が 使用されており、
Entity Framework マイグレーションを使うことで、簡単にユーザー情報に項目を追加できる。

UserStore

また、任意のストレージを使用するようにカスタマイズできる。
この際に、Entity Framework をキャンセルすることもできる。

補足: 「非常に沢山のことを覚え、実装を記述する必要がある」 (ASP.NET Forms認証 の記述)のは事実だが、 その代償として得られるのは、 自前実装すると間違えやすい部分が既に正しく実装されていることである。

  • パスワードのハッシュ(PBKDF2、反復回数はバージョンで引き上げ)
  • ロックアウト、2FA、トークンの生成と有効期限
  • セッション固定攻撃対策(サインイン時の再発行)

ASP.NET Forms認証 の 「任意の認証ロジック」を自作するより、 Identity を使うほうが安全というのが現在の判断である。

補足(セキュリティ): 外部ログイン(ソーシャル ログイン)を実装する際は、 PPID の補足のとおり 未検証のメール アドレスで既存アカウントに自動連結しないこと。 UserLoginInfo(プロバイダ名 + ProviderKey)で紐づけ、 メール一致で繋ぐ場合は email_verified を確認する。

STSとしての利用

ASP.NET Identity の OAuth2 による STS 実装(MS_ASPNETIdentitySTSOAuth2.md)を参照。

補足: STS系ミドルウェア に記したとおり、 ASP.NET Identity 自体はユーザ ストアと認証の仕組みであって STS ではない。 OAuth 2.0 / OpenID Connect の認可サーバを立てるなら、 OpenIddict(OSS)や Duende IdentityServer(商用)と 組み合わせるのが現在の構成である。

参考


Tags: .NET開発, OWIN, ASP.NET, 認証基盤, セキュリティ

NetDevInfraWiki

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

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally