Azure AD B2C の Custom Policy をさわっててたまにこのエラーがでることがありますかね。
Validation failed: 2 validation error(s) found in policy "B2C_1A_SIGNUP_SIGNIN" of tenant "***.onmicrosoft.com".Profile '***' uses an insecure authentication mode that is only allowed in production mode policies with metadata key 'AllowInsecureAuthInProduction' set to true.
Profile '***' uses an insecure authentication mode that is only allowed in production mode policies with metadata key 'AllowInsecureAuthInProduction' set to true.
出会う度になんだっけ?とかあーそれなって思うことが何度かあったので自分用にメモ。
解決策
エラーが起きるタイミングは RP の xml を B2C にアップロードする際です。
前提知識
TechnicalProfile で REST API を利用する際はMetadata の...
AuthenticationType
でどんな認証方式を使うか定義できます。AllowInsecureAuthInProduction
で Production 環境でセキュアじゃない認証を許可するか boolean で定義できます。定義しないとデフォルト値のfalse
になります。
エラーがおきるケース
AuthenticationType
を none
に設定した場合、Production 環境ならば AllowInsecureAuthInProduction
が false (デフォルト値) だとエラーが発生します。
△ 解決策1
AllowInsecureAuthInProduction
を true に設定すればエラーは起きませんので、Production でそのような運用するのであればこれでよいです。
あとはとりあえず検証するだけならいいのかもってのはあります。でもその検証結果をもとに数週間後または数か月後にコピペ作業で再利用した際、この部分を覚えてられるか?とかほかの人が作業したときにたとえコメントがあったとして見逃す可能性のリスクを踏むか?とか考えると心が荒んできます。認証関連かつセキュリティに関することなのでね。一歩踏み外すだけで地獄に落ちますからね...
ただ、そもそもセキュアな REST API をコールする想定であればこの対応はいまいちです。解決策2の方がよいです。
◎ 解決策2
大事なことなのでまた書きますが、そもそもセキュアな REST API をコールする想定であれば解決策1はいまいちです。
そこで、Production 環境か否かを判断することでエラーを回避します。
この環境の切り替えは、RP (←SignUpOrSignin.xmlとか) の TrustFrameworkPolicy で DeploymentMode
にて定義することができます。 DeploymentMode="Development" と定義すれば、AllowInsecureAuthInProduction
がデフォルト値の false でもエラーが発生しません。
環境ごとに値を切り替えるのであれば DeploymentMode
だけでなく REST API の Technical profile も含め、環境に応じた動的な Custom Policy の定義が必要になります。つまーり VS Code extension のAzure AD B2C を使い environment を定義していい感じに対応するところまでが解決策のセットになります。