Azure Active Directory B2Cでは、Custom Policyを設定することで様々な処理をカスタマイズすることができる。しなしながらこのCustom Policyはカスタマイズ性が高い反面、独自の概念を理解する必要があり、取っつきにくい機能となっている。以前に自身の理解を深めるために簡単なカスタマイズを試したみたので、ポイントを整理しておく。
作成したもの
OpenID Connect (OAuth2) のAuthorization Endpointにてログイン画面を表示する際に、新規登録へのリンクの表示・非表示をクエリパラメータで制御する。
- 表示
?p=B2C_1A_SIGNUP_SIGNIN_WITH_PARAMETER&hide_sign_up_link=false&...
- 非表示
?p=B2C_1A_SIGNUP_SIGNIN_WITH_PARAMETER&hide_sign_up_link=true&...
完成版はこちら:SignUpOrSignInWithParameter.xml
Custom Policy作成のポイント
Custom Policyの概念を理解する
大まかなイメージを掴むには公式ドキュメントよりもこちらの記事がわかりやすい。
参考事例を探す
Microsoftが管理しているCustom Policyの事例集があるため、作りたいものに近い事例を探してみると良い。
- azure-ad-b2c/samples: Azure AD B2C custom policy solutions and samples.
- azure-ad-b2c/unit-tests: Azure AD B2C custom policies unit tests
今回の場合はunit-test / Show sign-up linkが参考になった。
Authorization Endpointのクエリパラメータを受け取る
OAuth2 key-value parameters Claim Resolverを設定することでクエリパラメータの読み込みができる。今回のケースでは {OAUTH-KV:show_signup_link}
というClaimを定義すればよい。
参考:Prepopulate values on Azure b2C from the query parameters using Custom Policies - Stack Overflow
Sign Inボタンの表示・非表示を制御する
Self Asserted Attribute ProviderのMetadataのうち、setting.showSignupLink
を設定することで制御できる。
その他の注意点
- Custom Policyの変更は反映に数分かかることがある。
- 変更が反映されているかがわからないため開発時のデバッグがしにくいが、現時点では制約とのことで、5分程度待ってから動作確認をするといった対策を取る他ない。(参考:AAD B2C - "Lag" after custom policy upload - Microsoft Q&A)
- デバッグにログを利用できるが、設定方法と出力内容の理解のハードルが高い。
- ログ出力にもCustom Policyの設定が必要となる。(参考:Set up Application Insights)
- ログ出力内容の詳細なドキュメントはなく、意味を推測しながら読み解く必要がある。