「[[Open棟梁 wiki>https://opentouryo.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-[[戻る>Multi-AuthSystem]]

*目次 [#g19de368]
#contents

*概要 [#n7acd33b]
Multi-AuthSystemの動作検証手順のメモする。

*Idp動作検証 [#z524bb24]
**UID=メアド [#keb3577e]
サインアップ、サインイン・サインアウトをテストする。

***サインアップ [#y355fa48]
-サインアップする。
-指定のパスワード要件を満たさない場合、エラーとなることを確認する。

***サインイン [#t6756195]
サインインする。

-E-Mail確認せずサインイン試行
--E-Mail確認が再送されることを確認する。

-E-Mail確認を実行
--通常サインイン出来ることを確認する。

-パスワード失念のテストケース
--(1) パスワード失念により、サインインに失敗する。
--(2) この場合、再サインアップはNG(重複)になることを確認する。
--(3) E-Mail確認後のサインイン失敗でE-Mail確認が再送され無いことを確認する。
--(4) パスワード・リセット後のパスワードでサインインする。

***サインアウト [#yc19af70]
サインアウトする。

**UID=メアド以外 [#w0aea49d]
-サインアップ、サインイン・サインアウトをテストする。

-[[E-Mail確認はしない。>Multi-AuthSystemの独自仕様#qdb81a9b]]

**マルチテナント [#ra3d782b]
ユーザ編集画面を重点的にチェック

***マルチテナントの場合 [#x96e7294]
-編集権限を持つユーザは、サインアップ・ユーザ。
-サインアップ・ユーザのみがテナントのユーザを参照・編集できる。

***マルチテナントでない場合 [#p755656b]
-編集権限を持つユーザは、システム管理者。
-システム管理者のみがシステムのユーザを参照・編集できる。

**編集画面 [#f208cff5]
***電話番号編集 [#v46284b6]
-アカウント編集で電話番号を設定
-SMSでコードが送信されることを確認する。

-コードの入力
--誤ったコードを入力した場合、電話番号編集が正常終了しないことを確認する。
--受信したコードを入力して電話番号編集が正常終了することを確認する。

***2要素認証 [#x7270e00]
-アカウント編集で2要素認証をON
-別のブラウザからログイン試行を行う。
-2要素認証により、通知プロバイダを選択して、コードを送信を行う。

-コードの入力
--誤ったコードを入力した場合、2要素認証が正常終了しないことを確認する。
--受信したコードを入力して2要素認証が正常終了することを確認する。

***[[オンライン決済サービス>Multi-AuthSystem#le742d2a]]連携 [#ma78c48a]
-オンライン決済サービスとしては、StripeとPAY.JPを *.config で設定可能。
-オンライン決済サービスが有効な場合、支払い元情報が設定できることを確認する。

-テストモード
--オンライン決済サービスで決済されることを確認する。

**その他のシナリオ [#k27910d1]

***アカウント・ロックアウト [#bdb0e266]

***パスワード・リセット [#vd8e003d]

***SecurityStamp [#o6a5b756]
ユーザ属性の変更時に次回アクセスがログアウトされることを確認する。

*外部ログインの動作検証 [#x929aa7a]
**UID=メアド [#l4e00450]
次のパターンを意識的にテストする。

***外部ログインでサインアップする。 [#v4404c74]
-ローカル・ログイン無しのアカウントが作成される。

-以下の手順でローカル・ログインを作成できることを確認する。
--アカウント編集が画面でパスワード設定
--パスワード・リセット

***サインアップ後、当該 外部ログイン無し状態で外部ログイン。 [#d00c07dc]
-外部ログインとクレームが追加された後に、外部ログインでサインインされることを確認する。
-サインインされたユーザとメアドが異なる場合、コンフリクトが発生することを確認する。

***サインアップ後、当該 外部ログイン有り状態で外部ログイン。 [#nc72282f]
-クレームが更新された後に、外部ログインでサインインされることを確認する。
-サインインされたユーザとメアドが異なる場合、コンフリクトが発生することを確認する。

**UID=メアド以外 [#tb024b60]
-外部ログインをテストする。

-[[基本的には、"外部ログイン = OFF"。"外部ログイン = ON"の場合、以下のように動作する。>Multi-AuthSystemの独自仕様#qdb81a9b]]
--サインアップ時、UserNameとE-Mailの両方と連携する。
--UserNameとE-Mailの属性の連携はサインアップ時にだけ行う。
--コンフリクトは、E-Mailではなく、UserNameで発生する。

-このモードでの外部ログインとの親和性は低いと考える。
--サインアップ画面を提供せず、管理者がアカウント(E-Mailアドレス)を準備する。
--コンフリクトは、E-Mailではなく、UserNameで発生する。

**マルチテナント [#ecfe0da6]
動作に影響なし。

*OAuth 2.0 Serverの動作検証 [#o226b9a8]
OAuthで認証・認可した後、WebAPIへアクセスするまでの手順を使用して検証を行なう。

**Authorization Codeグラント種別 [#y138194c]
「http://localhost:nnnnn/home/index」で表示されるAuthorization Codeグラント種別のテスト用linkをclickする。

**Implicitグラント種別 [#t4b558e1]
「http://localhost:nnnnn/home/index」で表示されるImplicitグラント種別のテスト用linkをclickする。

**Resource Owner Password Credentialsグラント種別 [#ff1f98d1]
cURLコマンドする。

***処理の概要 [#r1983900]
-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コマンド [#ea1f8213]
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グラント種別 [#dc7b96b2]
cURLコマンドする。

***処理の概要 [#ia9fecfa]

-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コマンド [#s3f7650b]
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"}

*簡易テストシナリオ [#hc596088]
**UID = メアドの場合 [#k2da599c]
***サインアップ、サインイン・サインアウト [#v70b007f]
-サインアップ

-サインイン試行(E-Mail確認が必要)
--E-Mail確認を行う(AppScanではE-Mail確認ができない)

-サインイン試行(パスワード誤り or 失念)
--パスワード・リセットを行う

-(リセット後のパスワードで)サインイン
-サインアウト

***アカウント編集 [#l3c651cd]
編集後、SecurityStampが機能してサインアウトすることがある。

-サインイン

-パスワード変更
--パスワード変更
--サインアウト
--(変更後のパスワードで)サインイン

-外部ログイン(e.g. : マイクロソフト・アカウント)
--外部ログインの追加
--サインアウト
--(追加した外部ログインで)サインイン
--外部ログインの削除

-電話番号(AppScanではSMSができない)
--電話番号入力
--SMSコード発行
--SMSコード入力
---入力ミス
---再入力
--電話番号登録完了

-2要素認証(AppScanではE-Mail、SMSができない)
--2要素認証の有効化
--別ブラウザからログイン試行
--Notification Provider(E-Mail or SMS)を選択
--コード発行
--コード入力
---入力ミス
---再入力
--2要素認証でサインイン

-支払い元情報
--クレジット・カード情報入力
--オンライン決済サービスの課金テスト

***管理者画面でのメンテナンス操作 [#ed68fca3]
-(管理者アカウントで)サインイン~
管理者アカウント = サインアップしたアカウント。 

-ユーザ管理
--ユーザ一覧
--ユーザ作成
--ユーザ詳細
--ユーザ編集
--ユーザ削除

-ロール管理
--ロール一覧
--ロール作成
--ロール詳細
--ロール編集
--ロール削除

-サインアウト

***外部ログイン [#eeda5156]
-通常のサインアップをした後に、同じメアドの外部ログインでサインイン~
前述の、サインアップ後にアカウント編集画面で外部ログインを追加した場合と同じ状態になる。
--サインアウト
--再び外部ログインでサインイン

-外部ログインでサインアップした場合、外部ログインでサインイン~
ローカル・ログインできないアカウントならではのテストケースを消化する。

--外部ログインの追加と削除
---外部ログインを全て削除できないことを確認する。
---以下の手順でローカル・ログインを作成した後、~
全ての外部ログインを削除できることを確認する。

--以下の何れかで、ローカル・ログインを作成
---アカウント編集画面から、パスワード変更
---サインイン画面から、パスワード・リセット

***OAuth 2.0 の2つのGrant Typeのテスト [#xd7ae9b6]

-Authorization Codeグラント
--サインアウト
--Authorization Codeグラントのリンク押下
--サインイン → スコープ許可 → テスト画面表示まで。

-Implicitグラント
--サインアウト
--Implicitグラントのリンク押下
--サインイン → テスト画面表示 → トークン取得まで。


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS