[[Open棟梁>https://github.com/OpenTouryoProject]] wiki

-[[戻る>Multi-AuthSystem]]

*目次 [#pd845b45]
#contents

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

*Idp [#ab958dd9]

**基本 [#v56f28c7]

***サインアップとアカウント確認 [#f1df8ba0]
-アカウント確認は初回サインアップ後のレコードに対して行なう。

-サインアップを繰り返せば確認メールは飛ぶが、~
アカウント確認は、初回サインアップ後のレコードに対して行なう。

-初回サインアップ時のパスワードを失念した場合は、パスワード・リセットを行なう。

***サインイン・サインアウト [#d48b0127]

***アカウント編集 [#caf04244]
-パスワード

-電話番号(→SMS)

-[[二要素認証 (2FA) のON/OFF>#jad3e687]]

-[[外部ログイン>#abb9437a]]の一覧と削除

-,etc. (任意項目を追加可能)

**二要素認証 [#n514b715]

***有効化 [#jad3e687]

***他のブラウザでテスト [#rc29a943]

**セキュリティ [#r89815b6]
**運用 [#id35e3f1]

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

***パスワード・リセット [#tfbdc203]
-通常のパスワード・リセットのシナリオ。
-初回サインアップ時のパスワードを失念した場合のシナリオ。

***SecurityStamp [#n61abdc9]

**管理者画面 [#qebfe8a9]
-データ量が多い場合に耐えられない実装になっている(ページング実装無し)。

***ユーザ [#x0c2831f]
***ユーザ編集・削除 [#x0c2831f]
-マルチテナント対応済み。
-編集可能なユーザ属性が少ない(現状、Name = E-mailのみ編集可能)

***ロール [#i0b648a6]
***ロール編集・削除 [#i0b648a6]
-マルチテナント未対応。

*外部認証(≒ OAuth 2.0 Client) [#abb9437a]
*外部ログイン(≒ OAuth 2.0 Client) [#abb9437a]

**ExternalLoginCallbackの条件分岐 [#a1c25645]
***外部ログインの成否 [#r4461a5c]
***(1)外部ログインの成否 [#r4461a5c]
-失敗(異常終了)
-成功、(2)へ。

***外部ログインの有・無 [#o30222af]
-外部ログインがある→そのままサインイン(正常終了)
-外部ログインがない→外部ログインの作成、(3)へ。
***(2)外部ログインの有・無 [#o30222af]
-既存の外部ログインがある→そのままサインイン(正常終了)
-既存の外部ログインがない→新規の外部ログインの追加、(3)へ。

***外部ログインの作成 [#g8ab4fa9]
***(3)外部ログインの追加 [#g8ab4fa9]
-当該ユーザが既にサインアップされている。~
→ 外部ログインを追加してサインイン(正常終了)

-当該ユーザが未だサインアップされていない。~
→ サインアップ後に外部ログインを追加してサインイン(正常終了)

#外部ログイン追加、サインアップ、サインインの成否は省略。
#外部ログイン追加、サインアップ、サインインの成・否は既定の動作のため省略。

**外部ログイン削除のテストケース [#g85cf676]
**外部ログイン追加→削除のテストケース [#g85cf676]

***サインアップ→サインアップ済みの状態から外部ログイン [#ke781924]
+内部ログイン→内部ログアウト
+外部ログイン追加(外部ログイン)→外部ログアウト
+外部ログイン→外部ログイン削除→★→外部ログアウト
+外部ログイン追加(外部ログイン)→外部ログアウト
+外部ログイン→外部ログイン削除→★→外部ログアウト
+内部ログイン→内部ログアウト(外部ログイン削除後も、内部ログインは可能)
***サインアップ済みの状態から外部ログインの追加→削除 [#ke781924]
外部ログイン削除後のタイミングで、ログアウトしていないのは、~
代替のログイン手段を持っているため問題無いということ。

***サインアップせずに、外部ログイン [#x9af9e36]
+外部ログイン追加(外部ログイン)→外部ログアウト
+外部ログイン→☆外部ログイン削除→外部ログアウト
+外部ログイン追加(外部ログイン)→外部ログアウト
***サインアップせずに、外部ログインの追加→削除 [#x9af9e36]
-サインアップしていない場合に、最後の外部ログインを削除できなくなる。
-パスワードリセットで、代替のログイン手段を有効化すれば外部ログインを削除できる。

***外部ログイン削除のポイント [#p1f1355e]
-★の外部ログイン削除後のタイミングで、ログアウトしていないのは、~
代替のログイン手段を持っているため問題無いという認識。

-☆サインアップしていない場合に、外部ログインの削除ができなかった。~
(削除によりログイン手段を持たない状態になるのに、ログインしている状態になってしまうため)~
試しに外部ログイン✕2の状態でテストした所、外部ログインの削除が可能であることを確認できた。

*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コマンドする。
-認証の拡張仕様の部分は、&color(red){朱書き};にしてある。
-通常のリソース用WebAPIへのアクセス時はこのパラメタの指定は不要。

***処理の概要 [#md5764f5]
-Tokenエンドポイントに対して以下のRequestを出すと、Bearer Tokenが返ってくる。
--POST
--Authorization: Basic ZZZZZZZZZZ ---> 「クライアントID:クライアント・パスワード」をBase64エンコードしたもの。
--body : grant_type=password, username=ユーザID, password=ユーザ・パスワード, &color(red){scope=auth};

-Bearer Tokenをヘッダに指定して認証専用のWebAPIにアクセスすると認証情報を取得できる。
--POST
--Authorization: Bearer XXXXXXXXXX
--body : &color(red){client_id=クライアントID, client_secret=クライアント・パスワード};

***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=auth"

--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/GetAuthenticatedUsersClaim" -H "Authorization: Bearer XXXXXXXXXX" -d "client_id=クライアントID" -d "client_secret=クライアント・パスワード"

--Response (Body)
 {"userName":"XXXXX","email":"XXXXX","phoneNumber":"XXXXX"}

**Client Credentialsグラント種別 [#h00dd765]
cURLコマンドする。
-認証の拡張仕様の部分は、&color(red){朱書き};にしてある。
-通常のリソース用WebAPIへのアクセス時はこのパラメタの指定は不要。

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

-Tokenエンドポイントに対して以下のRequestを出すと、Bearer Tokenが返ってくる。
--POST
Authorization: Basic ZZZZZZZZZZ ---> 「クライアントID:クライアント・パスワード」をBase64エンコードしたもの。
--body:grant_type=client_credentials, &color(red){scope=auth};

-Bearer Tokenをヘッダに指定して認証専用のWebAPIにアクセスすると認証情報を取得できる。
--POST
--Authorization: Bearer XXXXXXXXXX
--body : &color(red){client_id=クライアントID, client_secret=クライアント・パスワード};

***cURLコマンド [#bf249746]
Debug ProxyにFiddler等を使用すると尚良(其の際は、 --proxy オプションを指定する必要がある)。

-Bearer Tokenの取得

--Request (cURLコマンド)
 >curl "http://localhost:nnnnn/OAuthBearerToken" -u "クライアントID:クライアント・パスワード" -d "grant_type=client_credentials" -d "scope=auth"

--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/GetAuthenticatedUsersClaim" -H "Authorization: Bearer XXXXXXXXXX" -d "client_id=クライアントID" -d "client_secret=クライアント・パスワード"

--Response (Body)
 {"userName":"XXXXX","email":"XXXXX","phoneNumber":"XXXXX"}


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