「[[Open棟梁 wiki>https://opentouryo.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -[[戻る>汎用認証サイト(Multi-purpose Authentication Site)]] *目次 [#g19de368] #contents *概要 [#n7acd33b] [[汎用認証サイト(Multi-purpose Authentication Site)]]の動作検証手順のメモする。 *Idp動作検証 [#z524bb24] **UID=メアド [#keb3577e] サインアップ、サインイン・サインアウトをテストする。 ***サインアップ [#y355fa48] -サインアップする。 -指定のパスワード要件を満たさない場合、エラーとなることを確認する。 ***サインイン [#t6756195] サインインする。 -E-mailアドレスの確認(E-mail confirmation)をせずサインインを試行する。 --E-mailアドレスの確認(E-mail confirmation)が再送されることを確認する。 -E-mailアドレスの確認(E-mail confirmation)を実行する。 --通常サインイン出来ることを確認する。 -パスワード失念のテストケース --(1) パスワード失念により、サインインに失敗する。 --(2) この場合、再サインアップはNG(重複)になることを確認する。 --(3) E-mailアドレス確認後のサインイン失敗で、~ E-mailアドレス確認が再送され無いことを確認する。 --(4) パスワード・リセット後のパスワードでサインインする。 ***サインアウト [#yc19af70] サインアウトする。 **UID=メアド以外 [#w0aea49d] -サインアップ、サインイン・サインアウトをテストする。 -[[E-mailアドレス確認(E-mail confirmation)はしない。>汎用認証サイトの独自仕様#gbd5af06]] **マルチテナント [#ra3d782b] ユーザ編集画面を重点的にチェック ***マルチテナントの場合 [#x96e7294] -編集権限を持つユーザは、サインアップ・ユーザ。 -サインアップ・ユーザのみがテナントのユーザを参照・編集できる。 ***マルチテナントでない場合 [#p755656b] -編集権限を持つユーザは、システム管理者。 -システム管理者のみがシステムのユーザを参照・編集できる。 **編集画面 [#f208cff5] ***電話番号編集 [#v46284b6] -アカウント編集で電話番号を設定 -SMSでコードが送信されることを確認する。 -コードの入力 --誤ったコードを入力した場合、電話番号編集が正常終了しないことを確認する。 --受信したコードを入力して電話番号編集が正常終了することを確認する。 ***2要素認証 [#x7270e00] -アカウント編集で2要素認証をON -別のブラウザからログイン試行を行う。 -2要素認証により、通知プロバイダを選択して、コードを送信を行う。 -コードの入力 --誤ったコードを入力した場合、2要素認証が正常終了しないことを確認する。 --受信したコードを入力して2要素認証が正常終了することを確認する。 ***[[オンライン決済サービス>汎用認証サイト(Multi-purpose Authentication Site)#qf3fddd8]]連携 [#ma78c48a] -オンライン決済サービスとしては、StripeとPAY.JPを *.config で設定可能。 -オンライン決済サービスが有効な場合、支払い元情報が設定できることを確認する。 -テストモード --オンライン決済サービスで決済されることを確認する。 **その他のシナリオ [#k27910d1] ***アカウント・ロックアウト [#bdb0e266] ***パスワード・リセット [#vd8e003d] ***SecurityStamp [#o6a5b756] ユーザ属性の変更時に次回アクセスがログアウトされることを確認する。 *外部ログインの動作検証 [#x929aa7a] **UID=メアド [#l4e00450] 次のパターンを意識的にテストする。 ***外部ログインでサインアップする。 [#v4404c74] ローカル・ログイン無しのアカウントが作成される。 ***ローカル・ログインを追加する。 [#x65eb259] 以下の2つの手順でローカル・ログインを作成できることを確認する。 -アカウント編集が画面でパスワード設定 -パスワード・リセット ***当該 外部ログイン無し状態で外部ログイン。 [#d00c07dc] ローカル・ログインでサインアップした後に、 -外部ログインでサインインできることを確認する。 -なお、編集画面の[外部ログイン]の[管理]リンクから、~ サインインされたユーザとメアドが異なる外部ログイン・アカウントで~ サインインしようとした場合、コンフリクトが発生することを確認する。 >この場合、「ソーシャルログインでアカウントが一致しません。」と言うメッセージが表示される。 ***当該 外部ログイン有り状態で外部ログイン。 [#nc72282f] 当該するメアドの外部ログイン・アカウントで外部ログインした後、 -外部ログインでサインイン(外部ログインとクレームの追加が)されることを確認する。 -なお、編集画面の[外部ログイン]の[管理]リンクから、~ サインインされたユーザとメアドが異なる外部ログイン・アカウントで~ サインインしようとした場合、コンフリクトが発生することを確認する。 >この場合、「ソーシャルログインでアカウントが一致しません。」と言うメッセージが表示される。 **UID=メアド以外 [#tb024b60] -外部ログインをテストする。 -[[基本的には、"外部ログイン = OFF"。"外部ログイン = ON"の場合、以下のように動作する。>汎用認証サイトの独自仕様#j6087e30]] --サインアップ時、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 confirmation)が必要 --E-mailアドレス確認(E-mail confirmation)を行う~ (AppScanではE-mailアドレス確認(E-mail confirmation)ができない) -サインイン試行(パスワード誤り 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グラントのリンク押下 --サインイン → テスト画面表示 → トークン取得まで。