- 追加された行はこの色です。
- 削除された行はこの色です。
「[[Open棟梁 wiki>https://opentouryo.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。
-[[戻る>Multi-AuthSystem]]
*目次 [#pd845b45]
#contents
*概要 [#ee98709c]
Multi-AuthSystemの動作検証手順のメモする。
*Idp [#ab958dd9]
*Idp動作検証 [#r86539ce]
**UID=メアド [#jbbecdad]
サインアップ、サインイン・サインアウトをテストする。
**基本 [#v56f28c7]
***サインアップ [#necdb82f]
-サインアップする。
-指定のパスワード要件を満たさない場合エラーとなることを確認する。
***サインアップとアカウント確認 [#f1df8ba0]
-アカウント確認は初回サインアップ後のレコードに対して行なう。
***サインイン [#t0293638]
サインインする。
-サインアップを繰り返せば確認メールは飛ぶが、~
アカウント確認は、初回サインアップ後のレコードに対して行なう。
-E-Mail確認せずサインイン試行
--E-Mail確認が再送されることを確認する。
-初回サインアップ時のパスワードを失念した場合は、パスワード・リセットを行なう。
-E-Mail確認を実行
--通常サインイン出来ることを確認する。
***サインイン・サインアウト [#d48b0127]
通常通り。
-パスワード失念のテストケース
--(1) パスワード失念により、サインインに失敗する。
--(2) この場合、再サインアップはNG(重複)になることを確認する。
--(3) E-Mail確認後のサインイン失敗でE-Mail確認が再送され無いことを確認する。
--(4) パスワード・リセット後のパスワードでサインインする。
***アカウント編集 [#caf04244]
-パスワード
--変更
--設定(外部ログイン後、ローカルログオンをする場合)
***サインアウト [#ifa1c46a]
サインアウトする。
-電話番号(→SMS)
**UID=メアド以外 [#qb0810d0]
-[[二要素認証 (2FA) のON/OFF>#jad3e687]]
***サインアップ [#jba6b8d5]
-サインアップする。
-指定のパスワード要件を満たさない場合エラーとなることを確認する。
-[[外部ログイン>#abb9437a]]の一覧と削除
***サインイン [#le8e1f1e]
-サインインする。
-E-Mail確認が不要であることを確認する。
-,etc. (任意項目を追加可能)
***サインアウト [#ubad3b32]
サインアウトする。
**二要素認証 [#n514b715]
**マルチテナント [#u1934061]
ユーザ編集画面を重点的にチェック
***有効化 [#jad3e687]
アカウント編集にて有効化
***マルチテナントの場合 [#te3ad648]
-編集権限を持つユーザは、サインアップ・ユーザ。
-サインアップ・ユーザのみがテナントのユーザを参照・編集できる。
***他のブラウザでテスト [#rc29a943]
-有効化した後は、他のブラウザでテストする。
-二要素認証はCookieを使用しているため、ブラウザ単位で行う。
***マルチテナントでない場合 [#pbd316b1]
-編集権限を持つユーザは、システム管理者。
-システム管理者のみがシステムのユーザを参照・編集できる。
**運用 [#id35e3f1]
**編集画面 [#k2b36cae]
***電話番号編集 [#cb746bae]
-アカウント編集で電話番号を設定
-SMSでコードが送信されることを確認する。
***アカウント・ロックアウト [#s8a2ba55]
指定回数、ログインをミスすると、指定時間ロックアウトされる。
-コードの入力
--誤ったコードを入力した場合、電話番号編集が正常終了しないことを確認する。
--受信したコードを入力して電話番号編集が正常終了することを確認する。
***パスワード・リセット [#tfbdc203]
-通常のパスワード・リセットのシナリオ。
***E-Mailアドレス編集 [#jc247b11]
-アカウントが任意文字列の場合、編集可能であることを確認する。
-
-例外的に以下のシナリオで使用する。
--初回サインアップ時のパスワードを失念した場合のシナリオ。
--ローカルログオンを設定するシナリオ。
***2要素認証 [#ifebe4e0]
-アカウント編集で2要素認証をON
-別のブラウザからログイン試行を行う。
-2要素認証により、通知プロバイダを選択して、コードを送信を行う。
***SecurityStamp [#n61abdc9]
-アカウント編集後にサインアウトされる。
-アカウント編集後にサインアウト・サインインする実装になっている理由はコレ。
-コードの入力
--誤ったコードを入力した場合、2要素認証が正常終了しないことを確認する。
--受信したコードを入力して2要素認証が正常終了することを確認する。
**管理者画面 [#qebfe8a9]
-データ量が多い場合に耐えられない実装になっている(ページング実装無し)。
***オンライン決済サービス連携 [#p3da39d3]
-オンライン決済サービスとしては、StripeとPAY.JPを *.config で設定可能。
-オンライン決済サービスが有効な場合、支払い元情報が設定できることを確認する。
***ユーザ編集・削除 [#x0c2831f]
-マルチテナント対応済み。
-現時点で、編集可能なユーザ属性が少ない(現状、Name = E-mailのみ編集可能)
-テストモード
--オンライン決済サービスで決済されることを確認する。
***ロール編集・削除 [#i0b648a6]
-マルチテナント対応済み。
**その他のシナリオ [#od873774]
*外部ログイン [#abb9437a]
***アカウント・ロックアウト [#l28ec490]
**ExternalLoginCallbackの条件分岐 [#a1c25645]
***(1)外部ログインの成否 [#r4461a5c]
-失敗(異常終了)
-成功、(2)へ。
***パスワード・リセット [#uec937bd]
***(2)外部ログインの有・無 [#o30222af]
-既存の外部ログインがある→そのままサインイン(正常終了)
-既存の外部ログインがない→新規の外部ログインの追加、(3)へ。
***SecurityStamp [#a9f02fcd]
ユーザ属性の変更時に次回アクセスがログアウトされることを確認する。
***(3)外部ログインの追加 [#g8ab4fa9]
-当該ユーザが既にサインアップされている。~
→ 外部ログインを追加してサインイン(正常終了)
*外部ログインの動作検証 [#q753f33b]
**UID=メアド [#b15cb14b]
次のパターンを息して気にテストする。
-当該ユーザが未だサインアップされていない。~
→ サインアップ後に外部ログインを追加してサインイン(正常終了)
***外部ログインでサインアップする。 [#q8963f4e]
-ローカル・ログイン無しのアカウントが作成される。
#外部ログイン追加、サインアップ、サインインの成・否は既定の動作のため省略。
-以下の手順でローカル・ログインを作成できることを確認する。
--アカウント編集が画面でパスワード設定
--パスワード・リセット
**外部ログイン追加→削除のテストケース [#g85cf676]
***サインアップ後、当該 外部ログイン無し状態で外部ログイン。 [#ddd5cf7d]
-外部ログインとクレームが追加された後に、外部ログインでサインインされることを確認する。
-サインインされたユーザとメアドが異なる場合、コンフリクトが発生することを確認する。
***サインアップ済みの状態から外部ログインの追加→削除 [#ke781924]
外部ログイン削除後のタイミングで、ログアウトしていないのは、~
代替のログイン手段を持っているため問題無いということ。
***サインアップ後、当該 外部ログイン有り状態で外部ログイン。 [#cfaccdd4]
-クレームが更新された後に、外部ログインでサインインされることを確認する。
-サインインされたユーザとメアドが異なる場合、コンフリクトが発生することを確認する。
***サインアップせずに、外部ログインの追加→削除 [#x9af9e36]
-サインアップしていない場合に、最後の外部ログインを削除できなくなる。
-パスワード追加、パスワードリセットで、ローカルログオンを有効化すれば外部ログインを削除できる。
**UID=メアド以外 [#l4d72553]
-連携するクレームがE-Mailではなく、UserNameになることを確認する。
*OAuth 2.0 Server [#i7db0ba2]
-E-Mailの連携については要カスタマイズ。
--連携しない。
--連携する場合、
---設定が無い場合に連携する。
---設定が有る場合には連携しない。
-コンフリクトは、E-Mailではなく、UserNameで発生する。
**マルチテナント [#o648b851]
動作に影響なし。
*OAuth 2.0 Serverの動作検証 [#i7db0ba2]
OAuthで認証・認可した後、WebAPIへアクセスするまでの手順を使用して検証を行なう。
**Authorization Codeグラント種別 [#w8d19e13]
「http://localhost:nnnnn/home/index」で表示されるAuthorization Codeグラント種別のテスト用linkをclickする。
**Implicitグラント種別 [#v8c5ac21]
「http://localhost:nnnnn/home/index」で表示されるImplicitグラント種別のテスト用linkをclickする。
**Resource Owner Password Credentialsグラント種別 [#ka3a0c97]
cURLコマンドする。
***処理の概要 [#md5764f5]
-Tokenエンドポイントに対して以下のRequestを出すと、Bearer Tokenが返ってくる。
--POST
--Authorization: Basic ZZZZZZZZZZ ---> 「クライアントID:クライアント・パスワード」をBase64エンコードしたもの。
--body : grant_type=password, username=ユーザID, password=ユーザ・パスワード, scope=XXXXX;
-Bearer Tokenをヘッダに指定してWebAPIにアクセスすると情報を取得できる。
--XXXX
--Authorization: Bearer XXXXXXXXXX
***cURLコマンド [#e3bf933b]
Debug ProxyにFiddler等を使用すると尚良(其の際は、 --proxy オプションを指定する必要がある)。
-Bearer Tokenの取得
--Request (cURLコマンド)
>curl "http://localhost:nnnnn/OAuthBearerToken"-u "クライアントID:クライアント・パスワード" -d "grant_type=password" -d "username=ユーザID" -d "password=ユーザ・パスワード" -d "scope=XXXXX"
--Response (Body)
{"access_token":"XXXXXXXXXX","token_type":"bearer","expires_in":nnnnn,"refresh_token":"YYYYYYYYYY"}
-Bearer Tokenを使用したOAuthリソースへのアクセス
--Request (cURLコマンド)
>curl "http://localhost:nnnnn/api/OAuthResourceApi/GetUserClaim" -H "Authorization: Bearer XXXXXXXXXX"
--Response (Body)
{"userName":"XXXXX","email":"XXXXX","phoneNumber":"XXXXX"}
**Client Credentialsグラント種別 [#h00dd765]
cURLコマンドする。
***処理の概要 [#qc919bfc]
-Tokenエンドポイントに対して以下のRequestを出すと、Bearer Tokenが返ってくる。
--POST~
Authorization: Basic ZZZZZZZZZZ ---> 「クライアントID:クライアント・パスワード」をBase64エンコードしたもの。
--body:grant_type=client_credentials, scope=XXXXX;
-Bearer Tokenをヘッダに指定してWebAPIにアクセスすると情報を取得できる。
--XXXXX
--Authorization: Bearer XXXXXXXXXX
***cURLコマンド [#bf249746]
Debug ProxyにFiddler等を使用すると尚良(其の際は、 --proxy オプションを指定する必要がある)。
-Bearer Tokenの取得
--Request (cURLコマンド)
>curl "http://localhost:nnnnn/OAuthBearerToken" -u "クライアントID:クライアント・パスワード" -d "grant_type=client_credentials" -d "scope=XXXXX"
--Response (Body)
{"access_token":"XXXXXXXXXX","token_type":"bearer","expires_in":nnnnn,"refresh_token":"YYYYYYYYYY"}
-Bearer Tokenを使用したOAuthリソースへのアクセス
--Request (cURLコマンド)
>curl "http://localhost:63359/api/OAuthResourceApi/GetUserClaim" -H "Authorization: Bearer XXXXXXXXXX"
--Response (Body)
{"userName":"XXXXX","email":"XXXXX","phoneNumber":"XXXXX"}