こんにちは、富士榮です。
おそらくAzure AD B2Cユーザ最大の要望だったカスタムドメイン(b2clogin.comのサブドメインではなく持ち込みのドメイン)がようやくパブリック・プレビューになりました。
参考)b2clogin.comのサブドメインをカスタムドメインと言っていた頃の記憶
当時もコレジャナイ感を感じつつ、Azure AD B2Cを使っているはずのレアル・マドリードのサイトを見ると自前ドメインを使ってるやん、、的な羨望の眼差しを抱えつつ実案件ではUSまで押しかけてプライベート・プレビューとして個別にカスタムドメインをアンロックしてもらったり、と苦労していたものです。。。
この苦労は当然世界共通で、中にはWeb Appをフロントにたててrewriteを使って無理矢理カスタムドメインを実現してしまう猛者まで現れる、という状態でした。
(ちなみにこの方法、当然のことながら可用性は落ちますし、Identity Protectionを使ったクライアント判定もできなくなるのでオススメはできません)
ということで、ようやくパブリック・プレビューです。
https://docs.microsoft.com/ja-jp/azure/active-directory-b2c/custom-domain?pivots=b2c-custom-policy
仕組みとしては、Azure Front DoorをAzure AD B2Cの手前においてURLのRewriteする、という形です。ってこれ、上で紹介した猛者のやってた技をオフィシャルに実装した、という感じなんですね。
Identity Protectionなどはちゃんと効くのか、などはおいおい深堀りしてみるとして、まずはファーストルックです。
大まかな手順としては、
- Azure AD B2Cの実体となっているAzure ADにカスタムドメインを追加する
- Azure Front Doorを作り、b2clogin.comへ振り分け設定をする
- Azure Front Doorにカスタムドメインを設定する
順に確認してみましょう。
1. Azure AD B2Cの実体となっているAzure ADにカスタムドメインを追加する
ご存知の通り、Azure AD B2Cには実体となっているAzure ADが存在します。ポータルからAzure AD B2Cを立ち上げると、別のテナントが開き、その中でAzure AD B2Cの管理を行う、という形になります。この別テナントにもAzure ADが存在しているので、Azure AD B2Cの管理画面からテナントを変えずにAzure Portalのホームへ遷移、改めてAzure ADの管理メニューを開くと実体の管理ができるようになります。(分かりにくいですね)
そのテナントは通常のAzure ADなのでカスタムドメインを追加することができます。
これで第1段階はOKです。
2. Azure Front Doorを作り、b2clogin.comへ振り分け設定をする
次はAzure Front Doorを作って構成します。
Azure Front Doorは単純なエッジで動くレイヤ7のフロントサービスで、SSLのオフロードなどを含め高スケーラビリティなWebアプリをデプロイするのに役に立つサービスです。
必要な設定は、
- フロントエンド設定(リクエストを受けるドメイン)
- バックエンド(振り分け先となるWebアプリケーション)
- 振り分けルール(パスやポートなど、バックエンドへの振り分け条件の設定)
次にバックエンドです。今回はAzure AD B2Cがバックエンドとなりますので、カスタムドメインを使いたいAzure AD B2Cのテナントドメイン名(xxx.b2clogin.com)を設定します。最後が振り分けルールです。
ここでは特に考えずにフロントとバックエンドをストレートにマッピングしておきます。
ここもカスタムドメインを追加した後でちゃんと設定しますので仮でOKです。
これでAzure Front Doorの基本設定は完了です。
3. Azure Front Doorにカスタムドメインを設定する
次はAzure Front Doorにもカスタムドメインを設定します。ここで設定するドメインは先にAzure ADに設定したドメインと同じものを使う必要があります。
Azure Front Doorのフロントエンドまたはドメインよりカスタムドメインを追加します。
CNAMEの設定と検証が走るので必要なレコードをDNSサーバ上に設定する必要がありますが、設定としては単純にカスタムドメインを追加するだけです。正常にドメインが追加できたら、振り分け規則についてもカスタムドメインの設定を行います。フロントエンドまたはドメインの設定より追加したカスタムドメインを選択するだけなので特に難しいことはありません。
とりあえず設定関係はこれで完了です。
ただ、忘れがちな点が何点かあります。
- カスタムHTMLをAzure Storage上に配置している場合はCORS設定を行う
- redirect_uriや各種エンドポイントのアドレスも当然変わるので外部IdPなどに設定してあるredirect_uriやアプリに設定してあるエンドポイントアドレスを修正する
外部IdP(LINEの例)のredirect_uriの追加
これで本当に設定完了です。
試してみる
ちゃんとカスタムドメインで動きます。
とはいえ気になる点は何点か。
- Identity Protectionなどフロントの環境を取得して動くサービスやカスタムポリシーの要求リゾルバはちゃんと動くのか?
- カスタムドメインを設定しても、https://カスタムドメイン/xxx.onmicrosoft.com(もしくはテナントID)となってしまうのをhttps://カスタムドメインだけにできないか?(ルール設定でなんとかなる気もしなくもない)
- SAML IdPとしてAzure AD B2Cをつごかす場合のIdPのEntityIDも変わっちゃう?