-
Notifications
You must be signed in to change notification settings - Fork 0
MS_FormsAuthVsASPNETIdentity
- 戻る(認証基盤)
- ASP.NET Forms認証 vs ASP.NET Identity
- ASP.NET Forms認証
- ASP.NET Identity
ASP.NET Forms認証 と
ASP.NET Identityのトレードオフをまとめた。
ざっくり、
- エンタープライズ・システムの認証基盤としては、
ASP.NET Identityはオーバースペックであり、
ASP.NET Forms認証がシンプルで使いやすい。
あまり使われなかった。
- エンタープライズ・システムに対して使用するには制限事項が多かった。
- …しかも、B2C の認証基盤としての機能が十分ではなかった。
-
以下を合わせた機能に、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 における 認証を参照)という選び分けになる。
非常にシンプルで使いやすい。
基本的に、ユーザ・プログラム側で Forms 認証の認証結果を判別し、
「Cookie 認証チケットの発行」の機能+αをサポートしている。
殆ど情報が無いが以下の様なものだったらしい。
-
機能
- 資格情報データストアを自動生成
- 資格情報を入力し、認証、承認を行う。
- 以下が提供されている。
- そのアクセスを行うための API
- 各種ログインコントロール
-
問題
- UserStore が RDBMS 前提
- 属性追加が別テーブルに追加される。(スキーマに制限事項がある)
- 外部ログインに対応していない。
補足: ASP.NET メンバーシップ(
SqlMembershipProvider)には、
上記に加えてパスワード ハッシュが SHA-1(ソルト付き)
という致命的な弱点があった。
現在の基準では総当たりに耐えない。
既存システムを見つけたら、移行の優先度は高い。
以下の機能をサポートしており、非常に有用だが、
同時に複雑で、既存システムに組み込むのは困難である。
-
認証チケット発行の仕組みと、ユーザストア管理の仕組み。
-
これに加えて、B2C 認証基盤機能として、非常に多くの機能をサポートしている。
- サインアップ、サインイン・サインアウト
- アカウント確認(E-mail confirmation)、二要素認証(2FA)
- アカウント・ロックアウト、パスワード・リセット、SecurityStamp
-
また、
-
OAuth、OpenID Connectなどの
外部ログイン機能や、 -
OAuth 2.0 Server 機能を持った、
セキュアトークンサービス(STS)機能開発支援機能を、
サポートしている。
-
OAuth、OpenID Connectなどの
以下の表は「Cookie 認証チケットの発行」の機能の範囲を比較しているだけに過ぎない。
- .NET Web Development and Tools Blog
Understanding OWIN Forms authentication in MVC 5
https://blogs.msdn.microsoft.com/webdev/2013/07/03/understanding-owin-forms-authentication-in-mvc-5/
| 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, 認証基盤, セキュリティ
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。