「[[Open棟梁 wiki>https://opentouryo.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -[[戻る>汎用認証サイトのファーストステップガイド]] --[[汎用認証サイトのファーストステップガイド (1)]] --[[汎用認証サイトのファーストステップガイド (2)]] --汎用認証サイトのファーストステップガイド (3) *目次 [#t7c1a531] #contents *概要 [#y310bfce] [[汎用認証サイト(Multi-purpose Authentication Site)]]~ の導入前の評価を行うためのファーストステップガイド。 *(12) オプションを変更してテストする [#eb0a77dd] **UserName=メアド以外 [#be3f6da3] ***app.configファイルを設定する。 [#nc977fa0] https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/app.config#L121 -RequireUniqueEmail : false ***サインアップ・サインインを確認する。 [#w6b3e579] メアド以外のUserNameでサインアップ・サインインできることを確認する。 ***E-mailアドレスを登録する。 [#f54cb776] サインインした後、ヘッダに表示されている「こんにちは[メールアドレス]さん!」をクリックし、アカウント編集画面へ遷移する。 このオプションを設定した場合、[E-mailの設定]リンクが表示され、これからE-mailアドレスを登録可能。 #ref(AddEmailAddress.png,left,nowrap,管理画面への遷移) この際、カスタムのE-mailアドレスの確認(E-mail confirmation)プロセスが実行される。 ***アカウント管理画面から追加・更新する。 [#c2db38ed] アカウント管理画面からUserName=メアド以外のユーザーを追加・更新できることを確認する。 #ref(Administration.png,left,nowrap,管理画面への遷移) -UserName=メアド以外で、ユーザーを追加 #ref(AddUser.png,left,nowrap,ユーザーの追加) -UserName=メアド以外で、ユーザーを更新 #ref(EditUser.png,left,nowrap,ユーザーの更新) -UserName=メアド以外のユーザーが追加・更新されたことを確認する。 #ref(UserList.png,left,nowrap,追加・更新されたアカウント) ***その他のテストケースを確認する。 [#b3503d18] -[[汎用認証サイトの独自仕様#gbd5af06]] -[[汎用認証サイトの動作検証#tb024b60]] **マルチテナントと管理画面 [#e0b6ddb5] -マルチテナントである場合と、ない場合とで、アカウント・ロールの管理画面での動作が異なる。 -アカウント・ロールの管理画面には、権限のあるアカウントでアクセスする必要がある。 #ref(Administration.png,left,nowrap,管理画面への遷移) ***app.configファイルを設定する。 [#ea7cab6c] https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/app.config#L91 -[[Multi-tenant : true (マルチテナントの場合)>#ye7b6e36]] -[[Multi-tenant : false (マルチテナントでない場合)>#abd85f33]] ***マルチテナントの場合 [#ye7b6e36] -サインアップしたユーザがテナント管理者になる。 -システム管理者とテナント管理者のみアカウント・ロールの管理画面にアクセスできる。 -テナントのユーザ・アカウントは、テナント管理者が登録する。 -管理画面で可能な操作の詳細は[[コチラ>汎用認証サイトの動作検証#ie509d38]]。 ***マルチテナントでない場合 [#abd85f33] -システム管理者のみアカウント・ロールの管理画面にアクセスできる。 -管理画面で可能な操作の詳細は[[コチラ>汎用認証サイトの動作検証#ie509d38]]。 *(13) OAuth2の3分割テストを行う。 [#r68f6218] 汎用認証サイトをOAuth2で登場する3つのサーバー機能に分割して動作検証をする。 -Authorization Server -Resource Server -Client **サイトを3分割する。 [#s9b1eaff] 以下のような感じで、サイトを3分割する。 ・MultiPurposeAuthSiteフォルダ ├ CreateClientsIdentityフォルダ ├ packagesフォルダ ├ MultiPurposeAuthSiteフォルダ ├ MultiPurposeAuthSiteRフォルダ ├ MultiPurposeAuthSiteCフォルダ ├ MultiPurposeAuthSite.slnファイル ├ MultiPurposeAuthSiteR.slnファイル └ MultiPurposeAuthSiteC.slnファイル ***MultiPurposeAuthSiteフォルダを3分割する。 [#r299fbef] -以下のフォルダをコピーして複製し、 --C:\MultiPurposeAuthSite\root\programs\MultiPurposeAuthSite\MultiPurposeAuthSite -以下のようにリネームする。 --MultiPurposeAuthSite~ Authorization Serverの役割 --MultiPurposeAuthSiteR~ Resource Serverの役割なので末尾に「R」を付与。 --MultiPurposeAuthSiteC~ Clientの役割なので末尾に「C」を付与。 *** MultiPurposeAuthSite.slnファイルを3分割する。 [#yd059af0] -以下のファイルをコピーして複製し、~ C:\MultiPurposeAuthSite\root\programs\MultiPurposeAuthSite\MultiPurposeAuthSite.sln -以下のようにリネームする。 --MultiPurposeAuthSite.sln --MultiPurposeAuthSiteR.sln --MultiPurposeAuthSiteC.sln -それぞれ*.slnファイルをTextEditorなどで開いて、~ 内部で指しているMultiPurposeAuthSite.csprojへのパスを変更する。 ***MultiPurposeAuthSite.csprojのポート番号を変更する。 [#ne016129] 3サイト同時起動のためMultiPurposeAuthSite.csprojのポート番号を変更する。 -以下のファイルのポート番号部分と重複しないようにする。 --.\MultiPurposeAuthSite\MultiPurposeAuthSite.csproj <IISUrl>http://localhost:63359/MultiPurposeAuthSite/</IISUrl> -ここでは、それぞれ、以下のようにポート番号を変更した。 --.\MultiPurposeAuthSiteR\MultiPurposeAuthSite.csproj <IISUrl>http://localhost:9998/MultiPurposeAuthSite/</IISUrl> --.\MultiPurposeAuthSiteC\MultiPurposeAuthSite.csproj <IISUrl>http://localhost:9999/MultiPurposeAuthSite/</IISUrl> **それぞれのapp.config設定を行う。 [#l40fb6a8] 以下のファイルの設定を変更する。~ C:\MultiPurposeAuthSite\root\programs\MultiPurposeAuthSite\MultiPurposeAuthSite\app.config ***ユーザストアをDBMSストアに変更する。 [#v0a5dd8f] [[コチラ>汎用認証サイトのファーストステップガイド (2)#zac33f46]]を参考にして、ユーザストアをDBMSストアに変更する。 ***ResourceServerエンドポイントの設定 [#h0c343ca] https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/app.config#L193 -以下の設定を、 <add key="OAuthResourceServerEndpointsRootURI" value="http://localhost:63359/MultiPurposeAuthSite" /> -のように変更する。 <add key="OAuthResourceServerEndpointsRootURI" value="http://localhost:9998/MultiPurposeAuthSite" /> ***Clientエンドポイントの設定 [#o46824a8] https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/app.config#L200 -以下の設定を、 <add key="OAuthClientEndpointsRootURI" value="http://localhost:63359/MultiPurposeAuthSite" /> -のように変更する。 <add key="OAuthClientEndpointsRootURI" value="http://localhost:9999/MultiPurposeAuthSite" /> ***設定したapp.configを複製する。 [#eb549865] -設定したapp.configを --C:\MultiPurposeAuthSite\root\programs\MultiPurposeAuthSite\MultiPurposeAuthSite\app.config -以下の場所に複製します。 --C:\MultiPurposeAuthSite\root\programs\MultiPurposeAuthSiteR\MultiPurposeAuthSite\app.config --C:\MultiPurposeAuthSite\root\programs\MultiPurposeAuthSiteC\MultiPurposeAuthSite\app.config **3つのサイトをデバッグ実行をする。 [#ma4392a8] 3つのサイトを*.slnファイルから開いてデバッグ実行をする。 *** *.slnファイルからWebサイトを開く [#od8ceca7] -Authorization Serverの役割~ C:\MultiPurposeAuthSite?\root\programs\MultiPurposeAuthSite.sln -Resource Serverの役割~ C:\MultiPurposeAuthSite?\root\programs\MultiPurposeAuthSiteR.sln -Clientの役割~ C:\MultiPurposeAuthSite?\root\programs\MultiPurposeAuthSiteC.sln ***それぞれ、F5を押下してデバッグ実行を開始する。 [#h5547293] -Authorization Serverの役割~ http://localhost:63359/MultiPurposeAuthSite/ -Resource Serverの役割~ http://localhost:9998/MultiPurposeAuthSite/ -Clientの役割~ http://localhost:9999/MultiPurposeAuthSite/ ***Clientから、[[Authorization Codeグラント種別>https://techinfoofmicrosofttech.osscons.jp/index.php?OAuth#yfeb403d]]をテストする。 [#g655411e] -以下のURLからClientにアクセスする。~ http://localhost:9999/MultiPurposeAuthSite/ -ここで、[Authorization Codeグラント(client_id, response_type, scope, state)]リンクを押下する。 -すると、Authorization Serverのサインイン画面に遷移するのでログインを行う。 -サインイン後、Authorization Serverの[リソース・アクセスの認可]画面に遷移するので、権限付与の認可を行う。 -すると、Clientに戻ってきて、ここでCodeがBearer Tokenに変換される。 -そして、ClientのOAuthAuthorizationCodeGrantClient(テスト用)画面が表示される。 -ここで、[GetUserClaim]ボタンを押下すると、ClientからResource ServerにWebAPI呼出が行われ結果が返る。 **処理フローの説明 [#o3362cc1] ***(1) スターターの位置 [#kb322ae2] ClientからAuthorization Serverへ遷移。 -Code:https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/Views/Home/Index.cshtml#L72 -URL : http://localhost:63359/MultiPurposeAuthSite/Account/OAuthAuthorize?client_id=・・・ ***(2) スターターの飛び先 [#bedb35d7] Authorization Serverでは、以下のルートで、[リソース・アクセスの認可]画面を表示。 -ApplicationOAuthBearerTokenProvider.ValidateClientRedirectUriを経由して、~ https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/Models/ASPNETIdentity/TokenProviders/ApplicationOAuthBearerTokenProvider.cs#L79 -GET: /Account/OAuthAuthorizeのaction methodに遷移する。~ https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/Controllers/AccountController.cs#L1124 -これによって、[リソース・アクセスの認可]画面 = OAuthAuthorize.cshtmlが表示される。~ https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/Views/Account/OAuthAuthorize.cshtml ***(3) 権限付与の認可を行う。 [#cbcb900d] Authorization Serverの[リソース・アクセスの認可]画面でポストバックすると、ClientのRedirectエンドポイントへRedirectされる。 -POST: /Account/OAuthAuthorizeのaction methodに遷移する。~ https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/Controllers/AccountController.cs#L1182 -上記の処理の完了後、ClientのRedirectエンドポイントへRedirectされる。~ http://localhost:9999/MultiPurposeAuthSite/Account/OAuthAuthorizationCodeGrantClient?code=code値&state=state値 ***(4) Bearer Tokenを取得する。 [#d94c9024] ClientのRedirectエンドポイントでBearer Tokenを取得してResourcesにアクセスする。 -GET: /Account/OAuthAuthorizationCodeGrantClientのaction methodに遷移する。~ https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/Controllers/AccountController.cs#L1243 -ここで、仲介コードを使用してTokenエンドポイントにアクセスする。 -すると、ApplicationOAuthBearerTokenProvider.ValidateClientAuthenticationを経由して、~ https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/Models/ASPNETIdentity/TokenProviders/ApplicationOAuthBearerTokenProvider.cs#L132 -Access Token・Refresh Tokenのレスポンスが返る。 ***(5) 以下はテスト用の処理フロー [#w202cd2d] 通常、仲介コードやAccess Token・Refresh Tokenは露見させないが、~ ここではテスト用に、[Authorization Code Grant]画面にこれらを表示する。 -[Authorization Code Grant]画面 = OAuthAuthorizationCodeGrantClient.cshtmlが表示される。~ https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/Views/Account/OAuthAuthorizationCodeGrantClient.cshtml その後、以下のRefresh処理、Get user claim処理を実行することができる。 -Refreshボタンを押下 --POST: /Account/OAuthAuthorizationCodeGrantClientのaction methodに遷移する。~ https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/Controllers/AccountController.cs#L1317 --Tokenエンドポイントで、Refresh Tokenを使用してAccess Tokenを更新~ GET: /OAuthBearerToken -Get user claimボタンを押下 --POST: /Account/OAuthAuthorizationCodeGrantClientのaction methodに遷移する。~ https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/Controllers/AccountController.cs#L1317 --ClientからResource ServerにWebAPI呼出が行われ結果が返る。~ なお、認可処理は、WebAPI内部でscopeを確認して行う。 ---認証 : AccessTokenFormatJwt.Unprotect~ https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/Models/ASPNETIdentity/TokenProviders/AccessTokenFormatJwt.cs#L163 ---WebAPI : OAuthResourceApiController.GetUserClaim~ https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/Controllers/OAuthResourceApiController.cs#L105