汎用認証サイトの独自仕様
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
「[[Open棟梁 wiki>https://opentouryo.osscons.jp]]」は、「...
-[[戻る>汎用認証サイト(Multi-purpose Authentication Site...
*目次 [#j24adbab]
#contents
*概要 [#i84718cb]
[[汎用認証サイト(Multi-purpose Authentication Site)]]の...
*Idp仕様 [#f550c2de]
**概要 [#p07e3d3b]
Idpの仕様については概ね、ASP.NET Identityに準拠。
ASP.NET Identity側の仕様については、「[[ASP.NET Identity>...
**カスタマイズ・ポイント [#n3b708da]
以下のスイッチで大きな動作変更が可能。
詳しくは「[[汎用認証サイトのコンフィギュレーション]]」を...
***[[RequireUniqueEmailスイッチ>汎用認証サイトのコンフィ...
以下のように、主に[[サインアップ・プロセス>#rc86b3dc]]に...
-RequireUniqueEmail : true
--UserName = E-mailアドレス
--インターネット環境の標準の実装はこちら。
--E-mailアドレスでサインアップするため、直ちにE-mailアド...
(E-mail confirmation)を行うため、サインアップ・プロセス...
-RequireUniqueEmail : false
--UserName = 任意文字列
--ユーザストアを管理者が準備するエンプラ向き実装はこちら。
--サインアップで、E-mailアドレスが提供されないので、~
サインアップ・プロセスは、UserName=メアドよりシンプルに...
しかし、E-mailアドレスの確認(E-mail confirmation)が実質...
---サインアップ画面を提供せず、管理者がアカウント(E-mail...
---若しくは、UserNameとE-mailアドレスの入力が可能なサイン...
---"ユーザ名@サイトのドメイン"でE-mailアドレスを準備する...
-その他、
--[[ユーザ名変更>#o0947cd8]]
--[[外部ログイン>#w534c815]]
>の動作にも影響を与える。
**利用するサービス [#a92c7f68]
***[[外部ログイン>#w534c815]] [#saead825]
-Microsoft
-Google
-Facebook
***[[オンライン決済サービス>汎用認証サイト(Multi-purpose...
-Stripe
-PAY.JP
***[[通知プロバイダ>汎用認証サイト(Multi-purpose Authent...
-SMTP
-SMS (Twilio)
**ユーザ・アカウント [#xa20a1e2]
***主要属性 [#b725e4d1]
-UserId = GUID
-[[UserNameはスイッチ次第>#gbd5af06]]
--基本は、E-mailアドレス
--スイッチ変更により、任意の文字列を使用可能。
-Password
--Passwordの強度は[[コチラの設定>汎用認証サイトのコンフィ...
--当然、[[ライブラリにて適切にハッシュ化>https://github.c...
-その他
--[[スキーマ>#e472fd55]]を参照。
***永続化 [#d378ad48]
-[[EntityFramework>https://techinfoofmicrosofttech.osscon...
-[[UserStoreTypeの設定>汎用認証サイトのコンフィギュレーシ...
--データストアは、メモリとRDBMSをサポート(NoSQLやLDAPの...
--RDBMSへのデータアクセスは、Dapperを使用して実装している。
**スキーマ [#e472fd55]
***DDL [#ge5c13dd]
https://github.com/OpenTouryoProject/MultiPurposeAuthSite...
***編集処理 [#hfcc91ec]
-アカウント編集処理
--非定型データを使用すればスキーマ変更は不要。
--[[設定>汎用認証サイトのコンフィギュレーション#b233454c]...
--編集可能なアカウント属性については[[こちら>#sc966644]]。
-ユーザ・ロール編集処理
--管理画面でユーザ・ロールのCRU(属性編集)Dが可能
--管理画面についての詳細は[[こちら>#ga313890]]。
**サインアップ・サインイン [#oe564461]
***サインアップとE-mailアドレス確認 [#rc86b3dc]
UserName = E-mailアドレス の場合、
-E-mailアドレスの確認(E-mail confirmation)は、初回サイ...
-初回サインアップ(レコード生成)後に、E-mailアドレスの確...
--サインアップをしようとすると、レコードを再生成後、E-mai...
--サインインをしようとすると、E-mailアドレスの確認(E-mai...
-初回サインアップ(レコード生成)後、
--E-mailアドレス確認のメールをロストした場合、~
---サインアップを繰り返せば、再び、E-mailアドレス確認メー...
---サインインを繰り返せば、再び、E-mailアドレス確認メール...
--パスワードを失念した場合、
---上記の「サインアップを繰り返す」を行えばサインアップで...
---若しくは、[[パスワード・リセット>#t06f7341]]を行えばサ...
***サインイン・サインアウト [#l4470148]
-通常通りサインアップする。
-[[Passwordの強度>#b725e4d1]]を満たさない場合、エラーとな...
**アカウント編集 [#sc966644]
***ユーザ名 [#o0947cd8]
-アカウント編集でユーザ名を変更
-UserName = E-mailアドレス の場合、~
E-mailアドレスの確認(E-mail confirmation)が必要。
***パスワード [#u4227d89]
-アカウント編集でパスワードを設定・変更
--変更
--設定([[外部ログイン>#w534c815]]後、ローカル・ログオン...
-[[Passwordの強度>#b725e4d1]]を満たさない場合、エラーとな...
***E-mailアドレス [#haeb62dc]
-アカウント編集でE-mailアドレスを設定・削除
-UserName = E-mailアドレス の場合に表示される。
-E-mailアドレスの確認(E-mail confirmation)が必要。
--リンクを実行しない場合、E-mailアドレス設定が正常終了し...
--リンクを実行した場合、E-mailアドレス設定が正常終了する。
***電話番号 [#p3aec882]
-アカウント編集で電話番号を設定・削除
-[[通知プロバイダのSMS>汎用認証サイト(Multi-purpose Auth...
--誤ったコードを入力した場合、電話番号設定が正常終了しな...
--正しいコードを入力した場合、電話番号設定が正常終了する。
***[[2要素認証(2FA)>#w7ba6fad]] [#b2ceb7bb]
-アカウント編集で[[2要素認証(2FA)>#w7ba6fad]]をON/OFFする。
-[[2要素認証(2FA)>#w7ba6fad]]のプロセスについては[[後述>#...
***[[外部ログイン>#w534c815]] [#z8a5ebd4]
[[外部ログイン>#w534c815]]の一覧表示と追加・削除
***[[オンライン決済サービス>汎用認証サイト(Multi-purpose...
-[[オンライン決済サービスとしては、StripeとPAY.JPを *.con...
-設定が有効な場合、クレジット・カード情報などの支払い元情...
-登録したクレジット・カード情報を利用してオンライン決済サ...
-[[Debugモード>汎用認証サイトのコンフィギュレーション#v44...
***属性データ(非定型データ) [#z9bb4735]
-属性データ(非定型データ)をメンテナンスする。
-JSON形式での情報格納を想定しているので、スキーマ(DDL)...
***OAuth2データ [#icfa3463]
ユーザ毎に、
-client_id
-client_secret
-redirect_uri(code)
-redirect_uri(token)
のデータを設定し、
OAuth2アクセストークンを取得可能。
**運用系機能 [#q853018f]
***パスワード・リセット [#t06f7341]
-通常のパスワード・リセットのシナリオ。
--パスワードを失念した場合、パスワード・リセットを行う。
-例外的に以下のシナリオで使用する。
--初回サインアップ時のパスワードを失念した場合のシナリオ。
--[[外部ログイン>#w534c815]]後、ローカル・ログオンを可能...
-[[Passwordの強度>#b725e4d1]]を満たさない場合、エラーとな...
**セキュリティ強化機能 [#df6f9e87]
***アカウント・ロックアウト [#tdca397b]
[[指定回数、ログインをミスすると、指定時間ロックアウトさ...
***SecurityStamp [#vbd67fbf]
-アカウント編集(ユーザ属性の変更)後のアクセスがサインア...
-アカウント編集後にサインアウト・サインインする実装になっ...
***2要素認証 [#w7ba6fad]
-アカウント編集で2要素認証をONにする。
-別のブラウザからログイン試行を行う~
(2要素認証ではCookieでブラウザを記憶するため)。
-すると通知プロバイダを選択したコードを送信が行われる。
-選択した通知プロバイダで通知を行い、受信したコードを入力...
--誤ったコードを入力した場合、2要素認証が正常終了しない。
--受信したコードを入力して2要素認証が正常終了する。
-.NET Core版では、TOTPの2FAがサポートされている。
**その他、追加の対応 [#fd41fc42]
***[[FIDO2.0対応]] [#a4e5d429]
***[[GDPR対策]] [#w97af74f]
*外部ログイン仕様 [#w534c815]
**概要 [#x9ecc92c]
概ね、[[ASP.NET Identity>https://techinfoofmicrosofttech....
-[[ASP.NET Identity>https://techinfoofmicrosofttech.ossco...
「[[ASP.NET Identityの外部ログイン>https://techinfoofmicr...
-サインアップ・サインインも可能。
-基本的には、[[UserName = E-mailアドレス>#gbd5af06]]
**カスタマイズ・ポイント [#n861c0bc]
外部ログイン処理の仕様について。
***外部ログイン設定 [#m1ac1110]
[[外部ログインと、外部ログイン・サービスを設定する。>汎用...
-[[RequireUniqueEmailスイッチ>#gbd5af06]]
--[[UserName = E-mailアドレス>#gbd5af06]]で動作する。
--[[UserName ≠ E-mailアドレス>#gbd5af06]]での外部ログイン...
---通常、サインアップ画面を提供せず、管理者がアカウント(...
---殆どのIdPではE-mailを使用しており、オプションで使用し...
---IdP間を跨ぐ場合、UserNameの一意性は保証されないので、...
-SaltParameter~
XSRF(=CSRF)を防ぐためのstateパラメタの生成に使用される。
-外部ログイン・サービス
--Microsoft
--Google
--Facebook
--Twitter
***外部ログインでサインアップ [#cd8169dc]
サインアップを外部ログインで行った場合、
-パスワードを持たないアカウントになる。
-この場合、後からパスワードを設定することで、ローカル・ロ...
--アカウント編集画面でパスワード追加する。
--パスワード・リセットを行なう。
-E-mailアドレスの確認(E-mail confirmation)
--外部ログイン処理で取得したE-mailアドレスは確認しない。~
(信頼するIdPのSTSで連携されたE-mailアドレスであるため)
--E-mailアドレスでサインアップして、そのままサインインす...
***外部ログインでサインイン [#rcf9978e]
-ローカル・ログインに外部ログインを重ねるパターンと、~
外部ログインに外部ログインを重ねるパターンとがある。
-サインインを外部ログインで行った場合、
--既存のアカウントにID連携でサインインできる。
--ID連携で必要なクレーム(属性値)を連携して上書きできる。
--なお、UserNameやE-mailなど、ID連携で変更できない属性値...
***外部ログインの一覧と削除 [#hbd8d5db]
-サインアップ済みの状態から外部ログインの追加 → 削除~
外部ログイン削除後のタイミングで、ログアウトしていないの...
代替のログイン手段を持っているため問題無いということ。
-サインアップせずに、外部ログインの追加 → 削除~
--ローカル・ログオンを可能にしていない場合、最後の外部ロ...
--後からパスワードを設定することでローカル・ログオンを有...
***外部ログインの詳細 [#g27b9c4f]
ExternalLoginCallbackの条件分岐
-AccountController~
https://github.com/OpenTouryoProject/MultiPurposeAuthSite...
--(1) 外部ログインの成否
---失敗(異常終了)
---成功、(2) へ。
--(2) 外部ログインの有・無
---既存の外部ログインがある → クレームを更新してサインイ...
---既存の外部ログインがない →新規の外部ログインの追加、(3...
--(3) 外部ログインの追加
---当該ユーザが既にサインアップされている。~
→ 外部ログイン、クレームを追加してサインイン(正常終了)
---当該ユーザが未だサインアップされていない。~
→ サインアップ後に外部ログイン、クレームを追加してサイン...
-ManageController~
https://github.com/OpenTouryoProject/MultiPurposeAuthSite...
--(1) 外部ログインの成否
---失敗(異常終了)
---成功、(2) へ。
--(2) 外部ログインの有・無
---既存の外部ログインがある → クレーム更新のみ行う(正常...
---既存の外部ログインがない →新規の外部ログインの追加、(3...
--(3) 外部ログインの追加
---当該ユーザが既にサインアップされている。~
→ 外部ログイン、クレームを追加してサインイン(正常終了)
---当該ユーザが未だサインアップされていない。~
→ このケースはありえない。
-クレームの連携(追加・更新)時に、ユーザ属性を更新するか...
--案件毎に決定してカスタマイズする。
--既定では、ユーザ属性の更新はしていない。
*管理機能 [#ga313890]
**管理者アカウント [#ba05d72a]
システム管理者アカウントサインインして管理操作を実行でき...
**ユーザ・ロール編集処理 [#ue4c3ec1]
-管理画面についての詳細は[[こちら>汎用認証サイトのファー...
-システム管理者アカウントのみ操作可能。~
(マルチテナント機能は v01-10 で削除した。)
*エラーメッセージ [#r932c23a]
**表示元 [#ee798d72]
***ASP.NET MVCのModel Bindingの検証機能によるもの。 [#m16...
-[[ASP.NET MVCのModel Bindingの検証機能>https://techinfoo...
(Compare属性など、一部、関連チェック相当の検証機能もある...
-検証項目と内容については、各画面で使用している[[ViewMode...
-エラーメッセージ~
例 : https://github.com/OpenTouryoProject/MultiPurposeAut...
--既定値~
以下のような属性では、既定のエラーメッセージを使用。
---[EmailAddress]
---[Required(AllowEmptyStrings = false or truw)]
--カスタムのエラーメッセージ~
以下のような属性では、カスタム([[Resourcesファイル>https...
[StringLength(
ASPNETIdentityConst.MaxLengthOfPassword,
ErrorMessageResourceName = "MaxLengthErrMsg",
ErrorMessageResourceType = typeof(Resources.CommonViewMo...
***ASP.NET Identityによるもの。 [#sbc65d2d]
-ASP.NET Identityが返すエラーメッセージ(IdentityResult.E...
例 : https://github.com/OpenTouryoProject/MultiPurposeAut...
--既にサインアップしている場合
--パスワード要件に合わない場合
***サーバー・サイド実装によるもの。 [#u70f84f3]
-アプリケーションのエラーメッセージを表示する。~
例 : https://github.com/OpenTouryoProject/MultiPurposeAut...
--ModelState.AddModelErrorで検索する。
--エラーメッセージは、[[Resourcesファイル>https://github....
**表示先 [#r0e2defe]
***[[ASP.NET MVCのModel Bindingの検証機能によるもの。>#m1...
-表示位置
--サマリ領域に表示する場合(既定の実装)、
---Html.ValidationSummaryを使用すれば、~
例 : https://github.com/OpenTouryoProject/MultiPurposeAut...
@Html.ValidationSummary("", new { @class = "text-danger"...
---div-ul-liタグが用意され、ソコにエラーメッセージが表示...
<div class="validation-summary-valid text-danger" data-v...
--入力項目の横に表示する場合、
---Html.ValidationMessageForを使用すれば、
@Html.PasswordFor(m => m.Password, new { @class = "form-...
@Html.ValidationMessageFor(m => m.Password, new { @class...
---入力項目の横にspanが用意され、ソコにエラーメッセージが...
<input class="form-control" data-val="true" data-val-len...
<span class="field-validation-valid" data-valmsg-for="Pa...
-表示例
--サマリ領域に表示する場合、
#ref(ErrMsg1.png,left,nowrap,サマリ領域に表示したエラーメ...
--入力項目の横に表示する場合、
#ref(ErrMsg2.png,left,nowrap,入力項目の横に表示したエラー...
***[[ASP.NET Identityによるもの。>#sbc65d2d]] [#yc9c7b31]
サーバー・サイドのチェック結果が、サマリ領域(Html.Valida...
例 : https://github.com/OpenTouryoProject/MultiPurposeAut...
@Html.ValidationSummary("", new { @class = "text-danger"...
***[[サーバー・サイド実装によるもの。>#u70f84f3]] [#ef3d9...
サーバー・サイドのチェック結果が、サマリ領域(Html.Valida...
例 : https://github.com/OpenTouryoProject/MultiPurposeAut...
@Html.ValidationSummary("", new { @class = "text-danger"...
*[[パラメタ化>汎用認証サイトのコンフィギュレーション]] [#...
-[[ASP.NET Identity>https://techinfoofmicrosofttech.ossco...
-[[汎用認証サイト>汎用認証サイト(Multi-purpose Authentic...
使用するパラメタについて、[[コチラ>汎用認証サイトのコンフ...
*STS仕様 [#g158996e]
-プロトコルに関しては、標準に準拠。
-ただし、実装レベルについては、個別検討が必要([[下記>#lf...
*参考 [#c596943c]
**比較 [#lfead2af]
-Authlete の OAuth 2.0 / OIDC 実装ナレッジ 完全に理解した...
https://ritou.hatenablog.com/entry/2018/10/02/013902
**[[GDPR対策]] [#ac810d7d]
終了行:
「[[Open棟梁 wiki>https://opentouryo.osscons.jp]]」は、「...
-[[戻る>汎用認証サイト(Multi-purpose Authentication Site...
*目次 [#j24adbab]
#contents
*概要 [#i84718cb]
[[汎用認証サイト(Multi-purpose Authentication Site)]]の...
*Idp仕様 [#f550c2de]
**概要 [#p07e3d3b]
Idpの仕様については概ね、ASP.NET Identityに準拠。
ASP.NET Identity側の仕様については、「[[ASP.NET Identity>...
**カスタマイズ・ポイント [#n3b708da]
以下のスイッチで大きな動作変更が可能。
詳しくは「[[汎用認証サイトのコンフィギュレーション]]」を...
***[[RequireUniqueEmailスイッチ>汎用認証サイトのコンフィ...
以下のように、主に[[サインアップ・プロセス>#rc86b3dc]]に...
-RequireUniqueEmail : true
--UserName = E-mailアドレス
--インターネット環境の標準の実装はこちら。
--E-mailアドレスでサインアップするため、直ちにE-mailアド...
(E-mail confirmation)を行うため、サインアップ・プロセス...
-RequireUniqueEmail : false
--UserName = 任意文字列
--ユーザストアを管理者が準備するエンプラ向き実装はこちら。
--サインアップで、E-mailアドレスが提供されないので、~
サインアップ・プロセスは、UserName=メアドよりシンプルに...
しかし、E-mailアドレスの確認(E-mail confirmation)が実質...
---サインアップ画面を提供せず、管理者がアカウント(E-mail...
---若しくは、UserNameとE-mailアドレスの入力が可能なサイン...
---"ユーザ名@サイトのドメイン"でE-mailアドレスを準備する...
-その他、
--[[ユーザ名変更>#o0947cd8]]
--[[外部ログイン>#w534c815]]
>の動作にも影響を与える。
**利用するサービス [#a92c7f68]
***[[外部ログイン>#w534c815]] [#saead825]
-Microsoft
-Google
-Facebook
***[[オンライン決済サービス>汎用認証サイト(Multi-purpose...
-Stripe
-PAY.JP
***[[通知プロバイダ>汎用認証サイト(Multi-purpose Authent...
-SMTP
-SMS (Twilio)
**ユーザ・アカウント [#xa20a1e2]
***主要属性 [#b725e4d1]
-UserId = GUID
-[[UserNameはスイッチ次第>#gbd5af06]]
--基本は、E-mailアドレス
--スイッチ変更により、任意の文字列を使用可能。
-Password
--Passwordの強度は[[コチラの設定>汎用認証サイトのコンフィ...
--当然、[[ライブラリにて適切にハッシュ化>https://github.c...
-その他
--[[スキーマ>#e472fd55]]を参照。
***永続化 [#d378ad48]
-[[EntityFramework>https://techinfoofmicrosofttech.osscon...
-[[UserStoreTypeの設定>汎用認証サイトのコンフィギュレーシ...
--データストアは、メモリとRDBMSをサポート(NoSQLやLDAPの...
--RDBMSへのデータアクセスは、Dapperを使用して実装している。
**スキーマ [#e472fd55]
***DDL [#ge5c13dd]
https://github.com/OpenTouryoProject/MultiPurposeAuthSite...
***編集処理 [#hfcc91ec]
-アカウント編集処理
--非定型データを使用すればスキーマ変更は不要。
--[[設定>汎用認証サイトのコンフィギュレーション#b233454c]...
--編集可能なアカウント属性については[[こちら>#sc966644]]。
-ユーザ・ロール編集処理
--管理画面でユーザ・ロールのCRU(属性編集)Dが可能
--管理画面についての詳細は[[こちら>#ga313890]]。
**サインアップ・サインイン [#oe564461]
***サインアップとE-mailアドレス確認 [#rc86b3dc]
UserName = E-mailアドレス の場合、
-E-mailアドレスの確認(E-mail confirmation)は、初回サイ...
-初回サインアップ(レコード生成)後に、E-mailアドレスの確...
--サインアップをしようとすると、レコードを再生成後、E-mai...
--サインインをしようとすると、E-mailアドレスの確認(E-mai...
-初回サインアップ(レコード生成)後、
--E-mailアドレス確認のメールをロストした場合、~
---サインアップを繰り返せば、再び、E-mailアドレス確認メー...
---サインインを繰り返せば、再び、E-mailアドレス確認メール...
--パスワードを失念した場合、
---上記の「サインアップを繰り返す」を行えばサインアップで...
---若しくは、[[パスワード・リセット>#t06f7341]]を行えばサ...
***サインイン・サインアウト [#l4470148]
-通常通りサインアップする。
-[[Passwordの強度>#b725e4d1]]を満たさない場合、エラーとな...
**アカウント編集 [#sc966644]
***ユーザ名 [#o0947cd8]
-アカウント編集でユーザ名を変更
-UserName = E-mailアドレス の場合、~
E-mailアドレスの確認(E-mail confirmation)が必要。
***パスワード [#u4227d89]
-アカウント編集でパスワードを設定・変更
--変更
--設定([[外部ログイン>#w534c815]]後、ローカル・ログオン...
-[[Passwordの強度>#b725e4d1]]を満たさない場合、エラーとな...
***E-mailアドレス [#haeb62dc]
-アカウント編集でE-mailアドレスを設定・削除
-UserName = E-mailアドレス の場合に表示される。
-E-mailアドレスの確認(E-mail confirmation)が必要。
--リンクを実行しない場合、E-mailアドレス設定が正常終了し...
--リンクを実行した場合、E-mailアドレス設定が正常終了する。
***電話番号 [#p3aec882]
-アカウント編集で電話番号を設定・削除
-[[通知プロバイダのSMS>汎用認証サイト(Multi-purpose Auth...
--誤ったコードを入力した場合、電話番号設定が正常終了しな...
--正しいコードを入力した場合、電話番号設定が正常終了する。
***[[2要素認証(2FA)>#w7ba6fad]] [#b2ceb7bb]
-アカウント編集で[[2要素認証(2FA)>#w7ba6fad]]をON/OFFする。
-[[2要素認証(2FA)>#w7ba6fad]]のプロセスについては[[後述>#...
***[[外部ログイン>#w534c815]] [#z8a5ebd4]
[[外部ログイン>#w534c815]]の一覧表示と追加・削除
***[[オンライン決済サービス>汎用認証サイト(Multi-purpose...
-[[オンライン決済サービスとしては、StripeとPAY.JPを *.con...
-設定が有効な場合、クレジット・カード情報などの支払い元情...
-登録したクレジット・カード情報を利用してオンライン決済サ...
-[[Debugモード>汎用認証サイトのコンフィギュレーション#v44...
***属性データ(非定型データ) [#z9bb4735]
-属性データ(非定型データ)をメンテナンスする。
-JSON形式での情報格納を想定しているので、スキーマ(DDL)...
***OAuth2データ [#icfa3463]
ユーザ毎に、
-client_id
-client_secret
-redirect_uri(code)
-redirect_uri(token)
のデータを設定し、
OAuth2アクセストークンを取得可能。
**運用系機能 [#q853018f]
***パスワード・リセット [#t06f7341]
-通常のパスワード・リセットのシナリオ。
--パスワードを失念した場合、パスワード・リセットを行う。
-例外的に以下のシナリオで使用する。
--初回サインアップ時のパスワードを失念した場合のシナリオ。
--[[外部ログイン>#w534c815]]後、ローカル・ログオンを可能...
-[[Passwordの強度>#b725e4d1]]を満たさない場合、エラーとな...
**セキュリティ強化機能 [#df6f9e87]
***アカウント・ロックアウト [#tdca397b]
[[指定回数、ログインをミスすると、指定時間ロックアウトさ...
***SecurityStamp [#vbd67fbf]
-アカウント編集(ユーザ属性の変更)後のアクセスがサインア...
-アカウント編集後にサインアウト・サインインする実装になっ...
***2要素認証 [#w7ba6fad]
-アカウント編集で2要素認証をONにする。
-別のブラウザからログイン試行を行う~
(2要素認証ではCookieでブラウザを記憶するため)。
-すると通知プロバイダを選択したコードを送信が行われる。
-選択した通知プロバイダで通知を行い、受信したコードを入力...
--誤ったコードを入力した場合、2要素認証が正常終了しない。
--受信したコードを入力して2要素認証が正常終了する。
-.NET Core版では、TOTPの2FAがサポートされている。
**その他、追加の対応 [#fd41fc42]
***[[FIDO2.0対応]] [#a4e5d429]
***[[GDPR対策]] [#w97af74f]
*外部ログイン仕様 [#w534c815]
**概要 [#x9ecc92c]
概ね、[[ASP.NET Identity>https://techinfoofmicrosofttech....
-[[ASP.NET Identity>https://techinfoofmicrosofttech.ossco...
「[[ASP.NET Identityの外部ログイン>https://techinfoofmicr...
-サインアップ・サインインも可能。
-基本的には、[[UserName = E-mailアドレス>#gbd5af06]]
**カスタマイズ・ポイント [#n861c0bc]
外部ログイン処理の仕様について。
***外部ログイン設定 [#m1ac1110]
[[外部ログインと、外部ログイン・サービスを設定する。>汎用...
-[[RequireUniqueEmailスイッチ>#gbd5af06]]
--[[UserName = E-mailアドレス>#gbd5af06]]で動作する。
--[[UserName ≠ E-mailアドレス>#gbd5af06]]での外部ログイン...
---通常、サインアップ画面を提供せず、管理者がアカウント(...
---殆どのIdPではE-mailを使用しており、オプションで使用し...
---IdP間を跨ぐ場合、UserNameの一意性は保証されないので、...
-SaltParameter~
XSRF(=CSRF)を防ぐためのstateパラメタの生成に使用される。
-外部ログイン・サービス
--Microsoft
--Google
--Facebook
--Twitter
***外部ログインでサインアップ [#cd8169dc]
サインアップを外部ログインで行った場合、
-パスワードを持たないアカウントになる。
-この場合、後からパスワードを設定することで、ローカル・ロ...
--アカウント編集画面でパスワード追加する。
--パスワード・リセットを行なう。
-E-mailアドレスの確認(E-mail confirmation)
--外部ログイン処理で取得したE-mailアドレスは確認しない。~
(信頼するIdPのSTSで連携されたE-mailアドレスであるため)
--E-mailアドレスでサインアップして、そのままサインインす...
***外部ログインでサインイン [#rcf9978e]
-ローカル・ログインに外部ログインを重ねるパターンと、~
外部ログインに外部ログインを重ねるパターンとがある。
-サインインを外部ログインで行った場合、
--既存のアカウントにID連携でサインインできる。
--ID連携で必要なクレーム(属性値)を連携して上書きできる。
--なお、UserNameやE-mailなど、ID連携で変更できない属性値...
***外部ログインの一覧と削除 [#hbd8d5db]
-サインアップ済みの状態から外部ログインの追加 → 削除~
外部ログイン削除後のタイミングで、ログアウトしていないの...
代替のログイン手段を持っているため問題無いということ。
-サインアップせずに、外部ログインの追加 → 削除~
--ローカル・ログオンを可能にしていない場合、最後の外部ロ...
--後からパスワードを設定することでローカル・ログオンを有...
***外部ログインの詳細 [#g27b9c4f]
ExternalLoginCallbackの条件分岐
-AccountController~
https://github.com/OpenTouryoProject/MultiPurposeAuthSite...
--(1) 外部ログインの成否
---失敗(異常終了)
---成功、(2) へ。
--(2) 外部ログインの有・無
---既存の外部ログインがある → クレームを更新してサインイ...
---既存の外部ログインがない →新規の外部ログインの追加、(3...
--(3) 外部ログインの追加
---当該ユーザが既にサインアップされている。~
→ 外部ログイン、クレームを追加してサインイン(正常終了)
---当該ユーザが未だサインアップされていない。~
→ サインアップ後に外部ログイン、クレームを追加してサイン...
-ManageController~
https://github.com/OpenTouryoProject/MultiPurposeAuthSite...
--(1) 外部ログインの成否
---失敗(異常終了)
---成功、(2) へ。
--(2) 外部ログインの有・無
---既存の外部ログインがある → クレーム更新のみ行う(正常...
---既存の外部ログインがない →新規の外部ログインの追加、(3...
--(3) 外部ログインの追加
---当該ユーザが既にサインアップされている。~
→ 外部ログイン、クレームを追加してサインイン(正常終了)
---当該ユーザが未だサインアップされていない。~
→ このケースはありえない。
-クレームの連携(追加・更新)時に、ユーザ属性を更新するか...
--案件毎に決定してカスタマイズする。
--既定では、ユーザ属性の更新はしていない。
*管理機能 [#ga313890]
**管理者アカウント [#ba05d72a]
システム管理者アカウントサインインして管理操作を実行でき...
**ユーザ・ロール編集処理 [#ue4c3ec1]
-管理画面についての詳細は[[こちら>汎用認証サイトのファー...
-システム管理者アカウントのみ操作可能。~
(マルチテナント機能は v01-10 で削除した。)
*エラーメッセージ [#r932c23a]
**表示元 [#ee798d72]
***ASP.NET MVCのModel Bindingの検証機能によるもの。 [#m16...
-[[ASP.NET MVCのModel Bindingの検証機能>https://techinfoo...
(Compare属性など、一部、関連チェック相当の検証機能もある...
-検証項目と内容については、各画面で使用している[[ViewMode...
-エラーメッセージ~
例 : https://github.com/OpenTouryoProject/MultiPurposeAut...
--既定値~
以下のような属性では、既定のエラーメッセージを使用。
---[EmailAddress]
---[Required(AllowEmptyStrings = false or truw)]
--カスタムのエラーメッセージ~
以下のような属性では、カスタム([[Resourcesファイル>https...
[StringLength(
ASPNETIdentityConst.MaxLengthOfPassword,
ErrorMessageResourceName = "MaxLengthErrMsg",
ErrorMessageResourceType = typeof(Resources.CommonViewMo...
***ASP.NET Identityによるもの。 [#sbc65d2d]
-ASP.NET Identityが返すエラーメッセージ(IdentityResult.E...
例 : https://github.com/OpenTouryoProject/MultiPurposeAut...
--既にサインアップしている場合
--パスワード要件に合わない場合
***サーバー・サイド実装によるもの。 [#u70f84f3]
-アプリケーションのエラーメッセージを表示する。~
例 : https://github.com/OpenTouryoProject/MultiPurposeAut...
--ModelState.AddModelErrorで検索する。
--エラーメッセージは、[[Resourcesファイル>https://github....
**表示先 [#r0e2defe]
***[[ASP.NET MVCのModel Bindingの検証機能によるもの。>#m1...
-表示位置
--サマリ領域に表示する場合(既定の実装)、
---Html.ValidationSummaryを使用すれば、~
例 : https://github.com/OpenTouryoProject/MultiPurposeAut...
@Html.ValidationSummary("", new { @class = "text-danger"...
---div-ul-liタグが用意され、ソコにエラーメッセージが表示...
<div class="validation-summary-valid text-danger" data-v...
--入力項目の横に表示する場合、
---Html.ValidationMessageForを使用すれば、
@Html.PasswordFor(m => m.Password, new { @class = "form-...
@Html.ValidationMessageFor(m => m.Password, new { @class...
---入力項目の横にspanが用意され、ソコにエラーメッセージが...
<input class="form-control" data-val="true" data-val-len...
<span class="field-validation-valid" data-valmsg-for="Pa...
-表示例
--サマリ領域に表示する場合、
#ref(ErrMsg1.png,left,nowrap,サマリ領域に表示したエラーメ...
--入力項目の横に表示する場合、
#ref(ErrMsg2.png,left,nowrap,入力項目の横に表示したエラー...
***[[ASP.NET Identityによるもの。>#sbc65d2d]] [#yc9c7b31]
サーバー・サイドのチェック結果が、サマリ領域(Html.Valida...
例 : https://github.com/OpenTouryoProject/MultiPurposeAut...
@Html.ValidationSummary("", new { @class = "text-danger"...
***[[サーバー・サイド実装によるもの。>#u70f84f3]] [#ef3d9...
サーバー・サイドのチェック結果が、サマリ領域(Html.Valida...
例 : https://github.com/OpenTouryoProject/MultiPurposeAut...
@Html.ValidationSummary("", new { @class = "text-danger"...
*[[パラメタ化>汎用認証サイトのコンフィギュレーション]] [#...
-[[ASP.NET Identity>https://techinfoofmicrosofttech.ossco...
-[[汎用認証サイト>汎用認証サイト(Multi-purpose Authentic...
使用するパラメタについて、[[コチラ>汎用認証サイトのコンフ...
*STS仕様 [#g158996e]
-プロトコルに関しては、標準に準拠。
-ただし、実装レベルについては、個別検討が必要([[下記>#lf...
*参考 [#c596943c]
**比較 [#lfead2af]
-Authlete の OAuth 2.0 / OIDC 実装ナレッジ 完全に理解した...
https://ritou.hatenablog.com/entry/2018/10/02/013902
**[[GDPR対策]] [#ac810d7d]
ページ名: