-
Notifications
You must be signed in to change notification settings - Fork 0
MS_ASPNETIdentity
- 戻る(OWIN(
MS_OWIN.md)、認証基盤)- ASP.NET Identity
- ASP.NET Forms認証
- STS系ミドルウェア
-
ASP.NET Forms認証 ではなく、
OWIN の認証用ミドルウェア(Owin.Security)を使用している。 - 特に、ソーシャルログインを行う場合、OWIN で提供されるライブラリを使用する必要がある。
Microsoft.Owin.Security.OAuthMicrosoft.Owin.Security.FacebookMicrosoft.Owin.Security.TwitterMicrosoft.Owin.Security.GoogleMicrosoft.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 分)で検証間隔を設定する。
Entity Framework(MS_EntityFramework.md)(Microsoft.AspNet.Identity.EntityFramework)が
使用されており、
Entity Framework マイグレーションを使うことで、簡単にユーザー情報に項目を追加できる。
また、任意のストレージを使用するようにカスタマイズできる。
この際に、Entity Framework をキャンセルすることもできる。
補足: 「非常に沢山のことを覚え、実装を記述する必要がある」 (ASP.NET Forms認証 の記述)のは事実だが、 その代償として得られるのは、 自前実装すると間違えやすい部分が既に正しく実装されていることである。
- パスワードのハッシュ(PBKDF2、反復回数はバージョンで引き上げ)
- ロックアウト、2FA、トークンの生成と有効期限
- セッション固定攻撃対策(サインイン時の再発行)
ASP.NET Forms認証 の 「任意の認証ロジック」を自作するより、 Identity を使うほうが安全というのが現在の判断である。
補足(セキュリティ): 外部ログイン(ソーシャル ログイン)を実装する際は、 PPID の補足のとおり 未検証のメール アドレスで既存アカウントに自動連結しないこと。
UserLoginInfo(プロバイダ名 + ProviderKey)で紐づけ、 メール一致で繋ぐ場合はemail_verifiedを確認する。
ASP.NET Identity の OAuth2 による STS 実装(MS_ASPNETIdentitySTSOAuth2.md)を参照。
補足: STS系ミドルウェア に記したとおり、 ASP.NET Identity 自体はユーザ ストアと認証の仕組みであって STS ではない。 OAuth 2.0 / OpenID Connect の認可サーバを立てるなら、 OpenIddict(OSS)や Duende IdentityServer(商用)と 組み合わせるのが現在の構成である。
- 認証基盤
- ASP.NET Forms認証
- STS系ミドルウェア
- クレームベース認証
- OpenID / OAuth / OpenID Connect(OpenID / OAuth / OpenID Connect)
- ASP.NET Core Identity の概要 - Microsoft Learn
- ASP.NET IdentityのUserStoreを自分で作る - Qiita
Tags: .NET開発, OWIN, ASP.NET, 認証基盤, セキュリティ
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。