Skip to content

MS_FormsAuthVsASPNETIdentity

nishi_74322014 edited this page Aug 11, 2026 · 1 revision

ASP.NET Forms認証 vs ASP.NET Identity

概要

ASP.NET Forms認証
ASP.NET Identityのトレードオフをまとめた。

分析

ざっくり、

ASP.NET Forms認証

  • エンタープライズ・システムの認証基盤としては、
    ASP.NET Identityはオーバースペックであり、
    ASP.NET Forms認証がシンプルで使いやすい。

ASP.NETメンバーシップ

あまり使われなかった。

  • エンタープライズ・システムに対して使用するには制限事項が多かった。
  • …しかも、B2C の認証基盤としての機能が十分ではなかった。

ASP.NET Identity

  • 以下を合わせた機能に、B2C 認証基盤機能が追加されたようなイメージ。

    • ASP.NET Forms 認証の認証チケット発行の仕組み。
    • ASP.NET メンバーシップのユーザストア管理の仕組み。
  • インターネット・システム向けの B2C 認証基盤としては、
    ASP.NET Identityが有用であるが、
    ASP.NET Forms認証と比べ複雑である。

補足(現在の判断軸): 本ページの比較は
「.NET Framework 上での二択」を前提としている。
新規開発では、この二択そのものが選択肢から外れている

系譜 現在
ASP.NET Forms 認証 .NET Framework のみ。新規採用しない
ASP.NET メンバーシップ 廃止
ASP.NET Identity(2.0) メンテナンス・フェーズ
ASP.NET Core Identity 現行(ASP.NET Core Identity
外部 IdP(OIDC の RP になる) 多くの場合これが最善

ただし、本ページの論旨は今も有効である。すなわち、

「単に社内システムでログインさせたいだけ」なのに、
B2C 向けのフル機能(サインアップ、メール確認、2FA、
ロックアウト、外部ログイン、STS)を抱え込むのは過剰である。

という判断は正しい。現在の対応物で言えば

  • 社内システムで AD が既にある
    Windows 認証、または Entra ID への OIDC 連携
  • 独自のユーザ ストアが要る B2C
    ASP.NET Core Identity
  • どちらでもない小規模
    Cookie 認証のみ(Identity なし。
    ASP.NET Core における 認証を参照)

という選び分けになる。

ASP.NET Forms認証

非常にシンプルで使いやすい。

基本的に、ユーザ・プログラム側で Forms 認証の認証結果を判別し、
「Cookie 認証チケットの発行」の機能+αをサポートしている。

ASP.NETメンバーシップ

殆ど情報が無いが以下の様なものだったらしい。

  • 機能

    • 資格情報データストアを自動生成
    • 資格情報を入力し、認証、承認を行う。
    • 以下が提供されている。
      • そのアクセスを行うための API
      • 各種ログインコントロール
  • 問題

    • UserStore が RDBMS 前提
    • 属性追加が別テーブルに追加される。(スキーマに制限事項がある)
    • 外部ログインに対応していない。

補足: ASP.NET メンバーシップ(SqlMembershipProvider)には、
上記に加えてパスワード ハッシュが SHA-1(ソルト付き)
という致命的な弱点があった。
現在の基準では総当たりに耐えない
既存システムを見つけたら、移行の優先度は高い。

ASP.NET Identity

以下の機能をサポートしており、非常に有用だが、
同時に複雑で、既存システムに組み込むのは困難である。

  • 認証チケット発行の仕組みと、ユーザストア管理の仕組み。

  • これに加えて、B2C 認証基盤機能として、非常に多くの機能をサポートしている。

    • サインアップ、サインイン・サインアウト
    • アカウント確認(E-mail confirmation)、二要素認証(2FA)
    • アカウント・ロックアウト、パスワード・リセット、SecurityStamp
  • また、

    サポートしている。

機能比較(Cookie認証チケット発行機能の範囲)

以下の表は「Cookie 認証チケットの発行」の機能の範囲を比較しているだけに過ぎない。

No. Features ASP.NET Forms Authentication OWIN Forms Authentication
1 Cookie Authentication(クッキー認証) Yes Yes
2 Cookieless Authentication(Cookie なしの認証) Yes No
3 Expiration(有効期限) Yes Yes
4 Sliding Expiration(スライディング有効期限) Yes Yes
5 Token Protection(トークンの保護) Yes Yes
6 Claims Support(クレーム同梱のサポート) No Yes
7 Web Farm Support(Web ファームのサポート) Yes Yes
8 Unauthorized Redirection(未認証時のログイン画面へのリダイレクト) Yes Yes

補足(この表の読み方): 差分は実質 2 と 6 の 2 点だけである。

  • 2. Cookieless Authentication(URL にチケットを埋め込む)は、
    無くて正しい。URL に認証情報が載ると
    Referer ヘッダ・ログ・ブラウザ履歴・共有リンクから漏れる。
    Forms 認証でも使うべきではなかった機能である。

  • 6. Claims Support が「No / Yes」であることが本質的な差。
    Forms 認証のチケットは「ユーザ名」しか運べないため、
    ロールや属性は毎回ストアを引く必要があった。
    クレーム対応により、認証結果に属性を同梱できるようになり、
    クレームベース認証
    OpenID Connect との接続が自然になった。

ASP.NET Core の Cookie 認証は、この OWIN 版の系譜にあたる。

参考


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

NetDevInfraWiki

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

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally