ポータル向け Azure AD B2C ユーザー インターフェイスをカスタマイズする
Azure Active Directory B2C (Azure AD B2C) では、サインアップおよびサインイン エクスペリエンスのためのユーザー インターフェイスのカスタマイズをサポートします。 この機能を使用して、ポータル内に作成されたカスタム サインアップおよびサインイン ページを備えた Azure AD B2C テナントを構成できます。 この記事では、Azure AD B2C 認証で使用するため、ポータルでサンプル HTML を使用してカスタム サインアップ/サインイン Web ページを作成および構成する方法について説明します。
注意
これらの手順では、Power Pages サイトの Azure AD B2C ユーザー インターフェイスを構成することもできます。 詳細: Power Pages とは
前提条件
開始する前に、自動、または手動 ステップを使用して、ポータル用 Azure AD B2C 認証の構成が完了していることを確認してください。 以下の手順に従って、この Azure AD B2C 構成を使用して、ポータル用ユーザー インターフェイスをカスタマイズする必要があります。
ステップ 1: Web テンプレートの作成
ポータル管理アプリを開きます。
左側のウィンドウから、コンテンツ の下で、Web テンプレート を選択します。
新規 をクリックします。
Azure AD B2C カスタム ページ などの 名前 を入力します。
Web サイト に関しては、ポータル Web サイトを選択します。
ソース に関しては、次のサンプルの Web テンプレート ソース HTML をコピーして貼り付けます。
<!DOCTYPE html> <html lang="en-US"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width", initial-scale="1.0"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title> {{ page.title | h }} </title> <link href={{ request.url | base }}/bootstrap.min.css rel="stylesheet"> <link href={{ request.url | base }}/theme.css rel="stylesheet"> <style> .page-heading { padding-top: 20px; } .page-copy { margin-bottom: 40px; } .highlightError { border: 1px solid #cb2027!important; background-color: #fce8e8!important; } .attrEntry .error.itemLevel { display: none; color: #cb2027; font-size: .9em; } .error { color: #cb2027; } .entry { padding-top: 8px; padding-bottom: 0!important; } .entry-item { margin-bottom: 20px; } .intro { display: inline; margin-bottom: 5px; } .pageLevel { width: 293px; text-align: center; margin-top: 5px; padding: 5px; font-size: 1.1em; height: auto; } #panel, .pageLevel, .panel li, label { display: block; } #forgotPassword { font-size: .75em; padding-left: 5px; } #createAccount { margin-left: 5px; } .working { display: none; background: url(data:image/gif;base64,R0lGODlhbgAKAPMAALy6vNze3PTy9MTCxOTm5Pz6/Ly+vNTS1Pz+/�N0Jp6BUJ9EBIISAQAh+QQJCQAKACxRAAIABgAGAAAEE1ClYU4RIIMTdCaegVCfRASCEgEAOw==) no-repeat; height: 10px; width: auto; } .divider { margin-top: 20px; margin-bottom: 10px; } .divider h2 { display: table; white-space: nowrap; font-size: 1em; font-weight: 700; } .buttons { margin-top: 10px; } button { width:auto; min-width:50px; height:32px; margin-top:2px; -moz-border-radius:0; -webkit-border-radius:0; border-radius:0; background:#2672E6; border:1px solid #FFF; color:#fff; transition:background 1s ease 0s; font-size:100%; padding:0 2px } button:hover { background:#0F3E83; border:1px solid #3079ed; -moz-box-shadow:0 0 0; -webkit-box-shadow:0 0 0; box-shadow:0 0 0 } .password-label label { display: inline-block; vertical-align: baseline; } img { border:0 } .divider { margin-top:20px; margin-bottom:10px } .divider h2 { display:table; white-space:nowrap; font-size:1em; font-weight:700 } .divider h2:after,.divider h2:before { border-top:1px solid #B8B8B8; content:''; display:table-cell; position:relative; top:.7em; width:50% } .divider h2:before { right:1.8% } .divider h2:after { left:1.8% } .verificationErrorText { color:#D63301 } .options div { display:inline-block; vertical-align:top; margin-top:7px } .accountButton,.accountButton:hover { background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAh1BMVEX///9QUFBOTk5LS0tERERCQkI/Pz9ISEg6OjpGRkZNTU08PDyAgID09PSlpaWWlpZxcXFgYGBZWVlUVFT6+vrx8fHt7e3s7Ozo6Oji4uLJycnGxsa4uLiqqqqgoKCNjY2JiYmGhoZra2tmZmb7+/vu7u7d3d3U1NTNzc2+vr67u7usrKx7e3vprNQnAAAA8klEQVQ4y63Q127DMAxAUZpDwyMeSdqsNqu7/f/va6zahgGJKAr0vgk6DyQh+6V/BiTOOeNRA9zuAWBdM6WBlPDTvaUUoAuMrT0mgNvA1IJjQB3MKjACvp6DK0WAH+agtH8H9jQHLUUgz7Uhx8xOXzNESxirLCYA2mw8tacI5FyIYXq8A9ge2Qs6oTnw2e2ruho2rjBcXJ4ADh3jBOQLQnVhRFx2gNDZ4ACogbHXj/ft9Dj5AcgbJFu5AThQWuYBIGmgtAFQo4EFB+CPGthJAPypgY3BHsheA5UNwLyAvsYNoDyroKUe4EoFTQ/yDtTONvsGUJ8KTUYyH+UAAAAASUVORK5CYII=); background-repeat:no-repeat } .accountButton { border:1px solid #FFF; color:#FFF; margin-left:0; margin-right:2px; transition:background-color 1s ease 0s; -moz-border-radius:0; -webkit-border-radius:0; border-radius:0; text-align:center; word-wrap:break-word; height:34px; width:158px; padding-left:30px; background-color:#505050; } .accountButton:hover { background-color:#B9B9B9; border:1px solid #FFF; -moz-box-shadow:0 0 0; -webkit-box-shadow:0 0 0; box-shadow:0 0 0 } .accountButton:focus { outline:gold solid 1px } #MicrosoftAccountExchange { background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAPFBMVEU1pe/////t+v4uoe5btvNixPVVwfUsoe9tyfXU7/y95vu24vrd9f5NtfLH6/ys3/o/sPE6qfD2/f+f2vnAysuQAAAAaElEQVQ4y93SORKAIAwFUEGCsoT1/nd1JkkDFhY24qt+8VMkk20lu6DAaVBOBsVKsuO8aYo08IqlYyxoRTQExfyKheRIgu5Yl4KoVhSUgNOhoiYRsmb5g2u+LtzXDNOhjKgoAZ9/8k8uZWsGqcIav5wAAAAASUVORK5CYII=); background-color:#33A7F2 } #MicrosoftAccountExchange:hover { background-color:#ADDBF9 } #GoogleExchange { background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAb1BMVEXcTkH////cTD/bSj3ZQDLYOyzaRDbeV0vbSDrZPS/66Obyv7rsnpfpkorjcWfgZlvXOCr++Pj5393haFz88/L88fD67Or319T1zsv1zsrxuLPuqaLuqKLoi4LlfXTgYlbWMyTWMiPwtrHwta/fXVH/sCIIAAAAmElEQVQ4y+2RyQ7DIBBDMcwAIXvovqXb/39jRaX0AEmr5px3tSV7PGLhX6TVRFpN61l9zPNS6kn9gDcXO67zDnCnO2BCiNIyMtgKKJgyY2zQ68JEDtqju0nFTcOsxPUMw1GDDUqt+tY51/YNVlhvacTgEfCDIY0Q/lkBSg4RaUmmDo4/JdMzHy1Q2ejMeCj6PrXQP5+1MI8X0Y4HL4c826EAAAAASUVORK5CYII=); background-color:#DC4E41 } #GoogleExchange:hover { background-color:#F1B8B3 } #TwitterExchange { background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAdVBMVEVgqd3///9Ypdtdp9xaptxSotpQodlNn9lWo9pUo9rX6Pa+2vGTw+iLvuZlqt79/P7K4PO62O+y0+6hyutysuD2+fzi7vne6/fT5PTE3fKs0O2lzeuZx+l7tuJqrd71+Pzz9vzn8PnQ4/SCueSAueNsrt9InNh7sQwBAAAAwklEQVQ4y92PRw6EMAwAXeIkdBbY3uv/n7gSAoLDD5hbPCPZgZVihEgYgNSUpmfS7bfbtHS2nReyL2Qoc+yp8ZRAwCEWjgGAPQ7sssKoAGsWBrrgyMZCwD77Uel+59E3Tt14xZ7qlY7BRf1CDgeMKMw8sBXGlKxWtLGvHCgkQ80m0YHpjjq4sQ74pn1mISLJVSAMiwJO98l/TWSNF1eGKzqKfZ7Vj0mnHHwodpP+WIYlZP373DTtVWxYr2FD3pOBdfIHhOAHYHQI9VgAAAAASUVORK5CYII=); background-color:#60A9DD } #TwitterExchange:hover { background-color:#BFDCF1 } #FacebookExchange { background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAaVBMVEU7W5z///85Wps3WJsiRo8xU5fw8vYyUpY0VZiAj70pS5OBkb0vUpb7+fwsTpTR1ud6irllerBPaqX09fnx8vfs7fSQoMZxg7VsgLNGY6FCX58ZP4v++/7r7vTZ3OupstGIlsFWcalDYaCK3qwDAAAAnklEQVQ4y+XQyw7CIBAFUBgc5VUoWGtb3/7/RyoYkyZAiSsXvdt7kstA/hRg/B0GpZ6byQ3Dw0NBaH+lMYRle3T0kwayACRdBrr/gnN+QtpQWv8cR4DswiUAjozlz4RdF8AmlnmwjaDQImoZwQkRedoToUS7D+ColGoTwQidx8oEQDMHN1MBva5MOL70SCHuE1TOhOpHrRt0FWAOP4IX8PsG2qEOR30AAAAASUVORK5CYII=); background-color:#3B5B9C } #FacebookExchange:hover { background-color:#B0BDD7 } #LinkedInExchange { background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAb1BMVEUAe7b///8AdrMklscAc7EAeLUAcbB5ttifzeMqmckAdLIAaqz7+/6PxeAShr0CgLkAba4nmMctksTv9Puw1eij0OWGvNtfrNJNo80YjMAeib/D4vGt3Oy82+yfzOOCvtyJvdx3tddirtI/ncoxmMj9KsrQAAAAw0lEQVQ4y9WSVw7DIAxAG8CkjJDVzO5x/zMWk0RNJaB/kfo+sGUeCMvstgI4J7F9aS5NxSLnTWLpZVDgexTqIiycUNBhgTxRyCKPYJ3dl7sITCkO+FyLXaWU310DscASOesf3ahWChGJ5cb4ASO5Joiu2EegWEmZa1c3yUwOHmHNuQgJup4CgF8YlKpcMhKvkNmb1REz6hdetsyziIBldv8lpH8ouGm28zQFCu2SOSAXlJYGYCgpFThEMFPm/zCryja8Acy7CRfMrcKPAAAAAElFTkSuQmCC); background-color:#0077B5 } #LinkedInExchange:hover { background-color:#99CAE1 } #AmazonExchange { background-image:url(https://images-na.ssl-images-amazon.com/images/G/01/lwa/btnLWA_gold_156x32.png); background-color:#FFF; color:transparent } #next { -moz-user-select:none; user-select:none; cursor:pointer; width:auto; padding-left:10px; padding-right:10px; height:30.5px; -moz-border-radius:0; -webkit-border-radius:0; border-radius:0; background:#2672E6; border:1px solid #FFF; color:#fff; transition:background 1s ease 0s; font-size:100% } #next:hover { background:#0F3E83; border:1px solid #FFF; box-shadow:0 0 0 } #next:hover,.accountButton:hover { -moz-box-shadow:0 0 0; -webkit-box-shadow:0 0 0; box-shadow:0 0 0; } </style> </head> <body> <div class="navbar navbar-inverse navbar-static-top" role="navigation"> <div class="container"> <div class="navbar-header"> <div class="visible-xs-block"> {{ snippets["Mobile Header"] }} </div> <div class="visible-sm-block visible-md-block visible-lg-block navbar-brand"> {{ snippets["Navbar Left"] }} </div> </div> </div> </div> <div class="container"> <div class="page-heading"> <ul class="breadcrumb"> <li> <a href={{ request.url | base }} title="Home">Home</a> </li> <li class="active">{{ page.title | h}}</li> </ul> {% include 'Page Header' %} </div> <div class="row"> <div class="col-md-12"> {% include 'Page Copy' %} <div id="api"></div> </div> </div> </div> <footer role="contentinfo"> <div class="footer-top hidden-print"> <div class="container"> <div class="row"> <div class="col-md-6 col-sm-12 col-xs-12 text-left"> {{ snippets["About Footer"] }} </div> <div class="col-md-6 col-sm-12 col-xs-12 text-right"> <ul class="list-social-links"> <li><a href=#><span class="sprite sprite-facebook_icon"></span></a></li> <li><a href=#><span class="sprite sprite-twitter_icon"></span></a></li> <li><a href=#><span class="sprite sprite-email_icon"></span></a></li> </ul> </div> </div> </div> </div> <div class="footer-bottom hidden-print"> <div class="container"> <div class="row"> <div class="col-md-4 col-sm-12 col-xs-12 text-left"> {{ snippets["Footer"] | liquid }} </div> <div class="col-md-8 col-sm-12 col-xs-12 text-left"> </div> </div> </div> </div> </footer> </body> </html>保存して閉じる を選択します。
ステップ 2: ページ テンプレートの作成
左側のウィンドウから、Web サイト の下で、ページ テンプレート を選択します。
新規 をクリックします。
Azure AD B2C カスタム ページ などの 名前 を入力します。
Web サイト に関しては、ポータル Web サイトを選択します。
種類 に Web テンプレート を選択します。
Web テンプレート に関しては、ステップ 1 で作成した Web テンプレートを選択します。
Web サイトのヘッダーとフッターの使用 をオフにします。
保存して閉じる を選択します。
ステップ 3: Web ページの作成
左側のウィンドウから、コンテンツ の下で、Web ページ を選択します。
新規 をクリックします。
サインイン などの 名前 を入力します。
Web サイト に関しては、ポータル Web サイトを選択します。
親ページ には、ホーム を選択します。
azure-ad-b2c-sign-inなどの Web ページ用 部分 URL を入力します。ページ テンプレート に関しては、ステップ 2 で作成したページ テンプレートを選択します。
公開状況 には、 公開済み を選択します。
保存して閉じる を選択します。
ステップ 4: サイト設定の作成
Azure AD B2C がカスタム ページを要求し、サインインまたはサインアップのユーザー インターフェイスを挿入できるようにするには、クロス オリジン リソース共有 (CORS) を構成するサイト設定が必要です。 次のサイト設定を作成します。
| 件名 | 値 |
|---|---|
| HTTP/Access-Control-Allow-Methods | GET, OPTIONS |
| HTTP/Access-Control-Allow-Origin | https://tenant-name.b2clogin.com たとえば、テナント名が ContosoOrg の場合、 https://contosoorg.b2clogin.com と入力します。 注記: この値は、発行者 URL のドメイン名部分をコピーすることで取得できます。 発行者 URL 値のドメイン以外の部分を必ず除外してください。たとえば、 /tfp/799f7b50-f7b9-49ec-ba78-67eb67210998/b2c_1_contoso/v2.0 を除外します。 |
サイトの設定を作成するには:
左側のウィンドウから、Web サイト の下で、サイト設定 を選択します。
新規 をクリックします。
上記の表に一覧表示されている 名前 を入力します。
Web サイト に関しては、ポータル Web サイトを選択します。
上記の表に一覧表示されているように、値 を入力します。
保存して閉じる を選択します。
他の CORS 設定の完全なリストについては、「CORS プロトコル サポート」を参照してください。
ステップ 5: Azure 構成
Azure ポータルにサインインします。
Azure ポータルの左上隅から、
を選択します。すべてのリソース を選択します。
B2C テナントを選択します。
まだ選択していない場合は、左側のウインドウから 概要 を選択します。
画面の右中央セクションから、B2C テナントの Azure AD B2C設定 を選択します。
このアクションにより、B2C テナントが別のブラウザー タブで開きます。B2C テナント ブラウザー タブの、左側ウィンドウの ポリシー の下で、ユーザー フロー を選択します。
ポータル用に作成したユーザー フローを選択します。 たとえば、
B2C_1_Contosoなどとします。左側のウィンドウから、カスタマイズ の下で、ページ レイアウト を選択します。
統合されたサインアップまたはサインイン ページ で、カスタム ページ コンテンツを使用する に対して はい を選択します。
カスタム ページ URI に関しては、ステップ 3 で作成したポータルのカスタム Web ページの完全な URL を入力します。
たとえば、ポータルhttps://contoso.powerappsportals.comのazure-ad-b2c-sign-inという名前のページに関しては、カスタム ページ URI をhttps://contoso.powerappsportals.com/azure-ad-b2c-sign-inとして使用します。
Azure AD B2C テナントは、サインアップとサインインのエクスペリエンスに対してカスタム ページを使用できるように構成されました。
関連項目
Azure Active Directory B2C プロバイダーの構成 (プレビュー)
Azure Active Directory B2C プロバイダーを手動で構成する
Azure Active Directory B2C で HTML テンプレートを使用してユーザー インターフェイスをカスタマイズする
注意
ドキュメントの言語設定についてお聞かせください。 簡単な調査を行います。 (この調査は英語です)
この調査には約 7 分かかります。 個人データは収集されません (プライバシー ステートメント)。
フィードバック
フィードバックの送信と表示