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

-[[戻る>汎用認証サイトのファーストステップガイド]]
--[[汎用認証サイトのファーストステップガイド (1)]]
--[[汎用認証サイトのファーストステップガイド (2)]]
--汎用認証サイトのファーストステップガイド (3)
--[[汎用認証サイトのファーストステップガイド (4)]]
--[[汎用認証サイトのファーストステップガイド (5)]]

*目次 [#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]]。
***管理画面で可能な操作の詳細 [#h9e6b150]
-[[汎用認証サイトの動作検証#ie509d38]]
-[[汎用認証サイトのファーストステップガイド (2) - (9) アカウント(ユーザ・ロール)の管理>汎用認証サイトのファーストステップガイド (2)#f0c1d26f]]

*(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
https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/app.config#L222

-以下の設定を、
 <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
https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/app.config#L229

-以下の設定を、
 <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
-Code : https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/Views/Shared/_Layout.cshtml#L161

-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
https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/Models/ASPNETIdentity/TokenProviders/ApplicationOAuthBearerTokenProvider.cs#L80

-GET: /Account/OAuthAuthorizeのaction methodに遷移する。~
https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/Controllers/AccountController.cs#L1124
-GET : /Account/OAuthAuthorizeのaction methodに遷移する。~
https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/Controllers/AccountController.cs#L1268

-これによって、[リソース・アクセスの認可]画面 = 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
-POST : /Account/OAuthAuthorizeのaction methodに遷移する。~
https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/Controllers/AccountController.cs#L1369

-上記の処理の完了後、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
-GET : /Account/OAuthAuthorizationCodeGrantClientのaction methodに遷移する。~
https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/Controllers/AccountController.cs#L1435

-ここで、仲介コードを使用してTokenエンドポイントにアクセスする。

-すると、ApplicationOAuthBearerTokenProvider.ValidateClientAuthenticationを経由して、~
https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/Models/ASPNETIdentity/TokenProviders/ApplicationOAuthBearerTokenProvider.cs#L132
https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/Models/ASPNETIdentity/TokenProviders/ApplicationOAuthBearerTokenProvider.cs#L145

-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

--POST : /Account/OAuthAuthorizationCodeGrantClientのaction methodに遷移する。~
https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/Controllers/AccountController.cs#L1534

--Tokenエンドポイントで、Refresh Tokenを使用してAccess Tokenを更新~
GET: /OAuthBearerToken
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
--POST : /Account/OAuthAuthorizationCodeGrantClientのaction methodに遷移する。~
https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/Controllers/AccountController.cs#L1564

--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
https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/Models/ASPNETIdentity/TokenProviders/AccessTokenFormatJwt.cs#L187

---WebAPI : OAuthResourceApiController.GetUserClaim~
https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/Controllers/OAuthResourceApiController.cs#L105
https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/Controllers/OAuthResourceApiController.cs#L104


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