Azure Active Directory B2C を使って、Apple ID でのサインアップとサインインを設定する
"開始する前に"、[ポリシーの種類の選択] セレクターを使用して、設定するポリシーの種類を選択します。 Azure Active Directory B2C には、ユーザーがアプリケーションを操作する方法を定義する 2 つの方法 (定義済みのユーザー フローを使用する、または完全に構成可能なカスタム ポリシーを使用する) があります。 この記事で必要な手順は、方法ごとに異なります。
注意
Azure Active Directory B2C で、カスタム ポリシーは、主に、複雑なシナリオに取り組む用途向けに設計されています。 ほとんどのシナリオで、組み込みユーザー フローを使用することをお勧めします。 まだ行っていない場合は、Active Directory B2C でのカスタム ポリシーの概要に関する記事で、カスタム ポリシー スターター パックの詳細を確認してください。
前提条件
- ユーザー フローを作成して、ユーザーがアプリケーションにサインアップおよびサインインできるようにします。
- Web アプリケーションを登録します。
- 「Active Directory B2C でのカスタム ポリシーの概要」にある手順を完了します。
- Web アプリケーションを登録します。
Apple ID アプリケーションを作成する
Azure Active Directory B2C (Azure AD B2C) で Apple ID でのユーザーのサインインを有効にするには、https://developer.apple.com でアプリケーションを作成する必要があります。 詳細については、Apple でのサインインに関するページを参照してください。 まだ Apple Developer アカウントを持っていない場合は、Apple Developer Program でサインアップできます。
- アカウントの資格情報を使用して Apple Developer ポータルにサインインします。
- メニューから、[Certificates, IDs, & Profiles](証明書、ID、プロファイル) を選択し、(+) を選択します。
- [Register a New Identifier](新しい ID の登録) で [App IDs](アプリ ID) を選択し、 [続行] を選択します。
- [種類の選択](Select a type) で [App](アプリ) を選択し、 [続行] を選択します。
- [Register an App ID]\(アプリ ID の登録\) の場合:
- [Description](説明) を入力します。
- [Bundle ID](バンドル ID) を入力します (例:
com.contoso.azure-ad-b2c
)。 - [Capabilities](機能) については、機能の一覧から [Sign in with Apple](Apple でサインイン) を選択します。
- この手順で チーム ID (アプリ ID のプレフィックス) をメモしておいてください。 この情報は後で必要になります。
- [Continue](続行) 、 [Register](登録) の順に選択します。
- メニューから、[Certificates, IDs, & Profiles](証明書、ID、プロファイル) を選択し、(+) を選択します。
- [Register a New Identifier](新しい ID の登録) で [Services IDs](サービス ID) を選択し、 [続行] を選択します。
- [Register a Services ID]\(サービス ID の登録\) の場合:
- [Description](説明) を入力します。 この説明は、同意画面でユーザーに表示されます。
- [Identifier](識別子) を入力します (例:
com.consoto.azure-ad-b2c-service
)。 サービス ID 識別子をメモしておきます。 この識別子は、OpenID Connect フローのクライアント ID です。 - [Continue](続行) を選択し、次に [Register](登録) を選択します。
- [Identifiers](識別子) から、作成した識別子を選択します。
- [Sign In with Apple](Apple でサインイン) を選択し、 [Configure](構成) を選択します。
- Apple でのサインインを構成する [Primary App ID](プライマリ アプリ ID) を選択します。
- [Domains and Subdomains](ドメインとサブドメイン) に
your-tenant-name.b2clogin.com
を入力します。 your-tenant-name をテナントの名前に置き換えます。 カスタム ドメインを使用する場合は、「https://your-domain-name
」と入力します。 - [Return URLs](戻り先 URL) に
https://your-tenant-name.b2clogin.com/your-tenant-name.onmicrosoft.com/oauth2/authresp
と入力します。 カスタム ドメインを使用する場合は、「https://your-domain-name/your-tenant-name.onmicrosoft.com/oauth2/authresp
」と入力します。your-tenant-name
を実際のテナントの名前に、your-domain-name
を実際のカスタム ドメインに置き換えます。 戻り先 URL はすべて小文字である必要があります。 - [次へ] を選択し、 [Done](完了) を選択します。
- ポップアップ ウィンドウが閉じたら、 [続行] を選択し、 [保存] を選択します。
Apple クライアント シークレットの作成
- Apple Developer ポータルのメニューから、 [Keys](キー) を選択し、 (+) を選択します。
- [Register a New Key]\(新しいキーの登録\) の場合:
- キー名を入力します。
- [Sign in with Apple](Apple でサインイン) を選択し、 [続行] を選択します。
- [Primary App ID](プライマリ アプリ ID) では、以前に作成したアプリを選択し、 [保存] を選択します。
- [Configure](構成) を選択し、次に [Register](登録) を選択してキー登録プロセスを終了します。 キー ID をメモしておきます。 このキーは、ユーザー フローを構成するときに必要になります。
- [Download Your Key](キーのダウンロード) では、 [Download](ダウンロード) を選択して、自分のキーが含まれている .p8 ファイルをダウンロードします。
Apple を ID プロバイダーとして構成する
- Azure AD B2C テナントの全体管理者として Azure portal にサインインします。
- 複数のテナントにアクセスできる場合、上部のメニューの [設定] アイコンを選択し、[ディレクトリとサブスクリプション] メニューからお使いの Azure AD B2C テナントに切り替えます。
- [Azure サービス] で、 [Azure AD B2C] を選択します。 または、検索ボックスを使用して検索し、 [Azure AD B2C] を選択します。
- [ID プロバイダー] を選んでから、 [Apple] を選びます。
- [名前] には、「Apple でサインイン」と入力します。
- Apple Developer ID (チーム ID) を入力します。
- Apple サービス ID (クライアント ID) を入力します。
- 「Apple クライアント シークレットの作成」の手順の Apple キー ID を入力します。
- Apple 証明書データを選択してアップロードします。
- [保存] を選択します。
重要
- Apple でのサインインでは、管理者が 6 か月ごとにクライアント シークレットを更新する必要があります。
- Apple クライアント シークレットは、有効期限が切れると自動的に更新されます。 シークレットを手動で更新する必要がある場合は、Azure portal で Azure AD B2C を開き、 [ID プロバイダー]>[Apple] にアクセスし、 [シークレットの更新] を選びます。
- [Apple でサインイン] ボタンを提供する方法に関するガイドラインに従ってください。
Apple ID プロバイダーをユーザー フローに追加する
ユーザーが Apple ID を使用してサインインできるようにするには、Apple ID プロバイダーをユーザー フローに追加する必要があります。 Apple でのサインインは、推奨されるバージョンのユーザー フローに対してのみ構成できます。 Apple ID プロバイダーをユーザー フローに追加するには、次のようにします。
- Azure AD B2C テナントで、 [ユーザー フロー] を選択します。
- Apple ID プロバイダーを追加するユーザー フローを選択します。
- [ソーシャル ID プロバイダー] で、 [Apple] を選びます。
- [保存] を選択します。
- ポリシーをテストするには、 [ユーザー フローを実行します] を選択します。
- [アプリケーション] には、以前に登録した testapp1 という名前の Web アプリケーションを選択します。 [応答 URL] に
https://jwt.ms
と表示されます。 - [ユーザー フローを実行します] ボタンを選択します。
- サインアップまたはサインイン ページで [Apple] を選択して、Apple ID でサインインします。
サインイン プロセスが成功すると、ブラウザーは https://jwt.ms
にリダイレクトされ、Azure AD B2C によって返されたトークンの内容が表示されます。
クライアント シークレットの署名
前にダウンロードした .p8 ファイルを使用して、クライアント シークレットで JWT に署名します。 JWT の作成と署名に使用できるライブラリは多数あります。 トークンを作成する Azure 関数を使用します。
Azure 関数 を作成します。
Developer で、 [コードとテスト] を選択します。
run.csx ファイルの内容をコピーし、エディターに貼り付けます。
[保存] を選択します。
HTTP
POST
要求を作成し、次の情報を指定します。- appleTeamId: ご利用の Apple Developer Team ID
- appleServiceId: App Service ID (クライアント ID)
- appleKeyId: JWT ヘッダーに格納されている 10 桁のキー ID (Apple で必須)
- p8key: PEM 形式のキー。 これは、テキスト エディターで .p8 ファイルを開き、改行なしで
-----BEGIN PRIVATE KEY-----
と-----END PRIVATE KEY-----
の間のすべてをコピーすることで取得できます。
次の JSON は、Azure 関数への呼び出し例です。
{
"appleTeamId": "ABC123DEFG",
"appleServiceId": "com.yourcompany.app1",
"appleKeyId": "URKEYID001",
"p8key": "MIGTAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBHkwdwIBAQQg+s07NiAcuGEu8rxsJBG7ttupF6FRe3bXdHxEipuyK82gCgYIKoZIzj0DAQehRANCAAQnR1W/KbbaihTQayXH3tuAXA8Aei7u7Ij5OdRy6clOgBeRBPy1miObKYVx3ki1msjjG2uGqRbrc1LvjLHINWRD"
}
Azure 関数は、応答内の適切に書式設定され署名されたクライアント シークレット JWT を使用して応答します。次に例を示します。
{
"token": "eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjb20ueW91cmNvbXBhbnkuYXBwMSIsIm5iZiI6MTU2MDI2OTY3NSwiZXhwIjoxNTYwMzU2MDc1LCJpc3MiOiJBQkMxMjNERUZHIiwiYXVkIjoiaHR0cHM6Ly9hcHBsZWlkLmFwcGxlLmNvbSJ9.Dt9qA9NmJ_mk6tOqbsuTmfBrQLFqc9BnSVKR6A-bf9TcTft2XmhWaVODr7Q9w1PP3QOYShFXAnNql5OdNebB4g"
}
ポリシー キーを作成する
Azure AD B2C テナントで前に記録したクライアント シークレットを格納する必要があります。
- Azure portal にサインインします。
- 複数のテナントにアクセスできる場合、上部のメニューの [設定] アイコンを選択し、[ディレクトリとサブスクリプション] メニューからお使いの Azure AD B2C テナントに切り替えます。
- [Azure サービス] で、 [Azure AD B2C] を選択します。 または、検索ボックスを使用して検索し、 [Azure AD B2C] を選択します。
- [概要] ページで、 [Identity Experience Framework] を選択します。
- [ポリシー キー] を選択し、 [追加] を選択します。
- [オプション] では、 [手動] を選びます。
- ポリシー キーの名前を入力します。 例: "AppleSecret"。 プレフィックス "B2C_1A_" がキーの名前に自動的に追加されます。
- [シークレット] に、Azure 関数 によって返されるトークンの値を入力します (JWT トークン)。
- [キー使用法] には [署名] を選択します。
- [作成] を選択します
重要
- Apple でのサインインでは、管理者が 6 か月ごとにクライアント シークレットを更新する必要があります。
- Apple クライアント シークレットの有効期限が切れた場合は、手動で更新し、新しい値をポリシー キーに格納する必要があります。
- 6 か月以内の独自のリマインダーを設定して、新しいクライアント シークレットを生成することをお勧めします。
- [Apple でサインイン] ボタンを提供する方法に関するガイドラインに従ってください。
Apple を ID プロバイダーとして構成する
ユーザーが Apple ID を使用してサインインできるようにするには、そのアカウントを Azure AD B2C がエンドポイント経由で通信できる相手のクレーム プロバイダーとして定義する必要があります。 エンドポイントでは、特定のユーザーが認証されていることを確認するために Azure AD B2C で使用される一連のクレームが提供されます。
Apple ID をクレーム プロバイダーとして定義するには、それをポリシーの拡張ファイル内の ClaimsProviders 要素に追加します。
TrustFrameworkExtensions.xml を開きます。
ClaimsProviders 要素を見つけます。 存在しない場合は、それをルート要素の下に追加します。
新しい ClaimsProvider を次のように追加します。
<ClaimsProvider> <Domain>apple.com</Domain> <DisplayName>Apple</DisplayName> <TechnicalProfiles> <TechnicalProfile Id="Apple-OIDC"> <DisplayName>Sign in with Apple</DisplayName> <Protocol Name="OpenIdConnect" /> <Metadata> <Item Key="ProviderName">apple</Item> <Item Key="authorization_endpoint">https://appleid.apple.com/auth/authorize</Item> <Item Key="AccessTokenEndpoint">https://appleid.apple.com/auth/token</Item> <Item Key="JWKS">https://appleid.apple.com/auth/keys</Item> <Item Key="issuer">https://appleid.apple.com</Item> <Item Key="scope">name email openid</Item> <Item Key="HttpBinding">POST</Item> <Item Key="response_types">code</Item> <Item Key="external_user_identity_claim_id">sub</Item> <Item Key="response_mode">form_post</Item> <Item Key="ReadBodyClaimsOnIdpRedirect">user.name.firstName user.name.lastName user.email</Item> <Item Key="client_id">You Apple ID</Item> <Item Key="UsePolicyInRedirectUri">false</Item> </Metadata> <CryptographicKeys> <Key Id="client_secret" StorageReferenceId="B2C_1A_AppleSecret"/> </CryptographicKeys> <OutputClaims> <OutputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="sub" /> <OutputClaim ClaimTypeReferenceId="identityProvider" DefaultValue="https://appleid.apple.com" AlwaysUseDefaultValue="true" /> <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="socialIdpAuthentication" AlwaysUseDefaultValue="true" /> <OutputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="user.name.firstName"/> <OutputClaim ClaimTypeReferenceId="surname" PartnerClaimType="user.name.lastName"/> <OutputClaim ClaimTypeReferenceId="email" /> </OutputClaims> <OutputClaimsTransformations> <OutputClaimsTransformation ReferenceId="CreateRandomUPNUserName"/> <OutputClaimsTransformation ReferenceId="CreateUserPrincipalName"/> <OutputClaimsTransformation ReferenceId="CreateAlternativeSecurityId"/> <OutputClaimsTransformation ReferenceId="CreateSubjectClaimFromAlternativeSecurityId"/> </OutputClaimsTransformations> <UseTechnicalProfileForSessionManagement ReferenceId="SM-SocialLogin" /> </TechnicalProfile> </TechnicalProfiles> </ClaimsProvider>
client_id をサービス ID に設定します。 たとえば、「
com.consoto.azure-ad-b2c-service
」のように入力します。ファイルを保存します。
ユーザー体験を追加する
この時点では、ID プロバイダーはセットアップされていますが、サインイン ページではまだ使用できません。 独自のカスタム ユーザー体験がない場合は、既存のテンプレート ユーザー体験の複製を作成してください。そうでない場合は、次の手順に進みます。
- スターター パックから TrustFrameworkBase.xml ファイルを開きます。
Id="SignUpOrSignIn"
を含む UserJourney 要素を見つけ、その内容全体をコピーします。- TrustFrameworkExtensions.xml を開き、UserJourneys 要素を見つけます。 要素が存在しない場合は追加します。
- コピーした UserJourney 要素の内容全体を UserJourneys 要素の子として貼り付けます。
- ユーザー体験の ID の名前を変更します。 たとえば、「
Id="CustomSignUpSignIn"
」のように入力します。
ユーザー体験に ID プロバイダーを追加する
これでユーザー体験ができたので、ユーザー体験に新しい ID プロバイダーを追加します。 最初にサインイン ボタンを追加してから、ボタンをアクションにリンクします。 アクションは、前に作成した技術プロファイルです。
ユーザー体験内で、
Type="CombinedSignInAndSignUp"
またはType="ClaimsProviderSelection"
を含むオーケストレーション ステップ要素を見つけます。 これは通常、最初のオーケストレーション ステップです。 ClaimsProviderSelections 要素には、ユーザーがサインインに使用できる ID プロバイダーの一覧が含まれています。 要素の順序により、ユーザーに表示されるサインイン ボタンの順序が制御されます。 ClaimsProviderSelection XML 要素を追加します。 TargetClaimsExchangeId の値をフレンドリ名に設定します。次のオーケストレーション ステップで、ClaimsExchange 要素を追加します。 ID を、ターゲットの要求交換 ID の値に設定します。TechnicalProfileReferenceId の値を、前に作成した技術プロファイルの ID に更新します。
次の XML は、ID プロバイダーを使用したユーザー体験の最初の 2 つのオーケストレーション ステップを示しています。
<OrchestrationStep Order="1" Type="CombinedSignInAndSignUp" ContentDefinitionReferenceId="api.signuporsignin">
<ClaimsProviderSelections>
...
<ClaimsProviderSelection TargetClaimsExchangeId="AppleExchange" />
</ClaimsProviderSelections>
...
</OrchestrationStep>
<OrchestrationStep Order="2" Type="ClaimsExchange">
...
<ClaimsExchanges>
<ClaimsExchange Id="AppleExchange" TechnicalProfileReferenceId="Apple-OIDC" />
</ClaimsExchanges>
</OrchestrationStep>
証明書利用者ポリシーを構成する
証明書利用者ポリシー (例 SignUpSignIn.xml) は、Azure AD B2C が実行されるユーザー体験を指定します。 証明書利用者内の DefaultUserJourney 要素を検索します。 ID プロバイダーを追加したユーザー体験 ID と一致するように ReferenceId を更新します。
次の例では、CustomSignUpSignIn
ユーザー体験について、ReferenceId を CustomSignUpSignIn
に設定しています。
<RelyingParty>
<DefaultUserJourney ReferenceId="CustomSignUpSignIn" />
...
</RelyingParty>
カスタム ポリシーをアップロードする
- Azure portal にサインインします。
- ポータル ツール バーにある [ディレクトリ + サブスクリプション] アイコンを選択し、Azure AD B2C テナントを含むディレクトリを選択します。
- Azure portal で、 [Azure AD B2C] を検索して選択します。
- [ポリシー] で [Identity Experience Framework] を選択します。
- [カスタム ポリシーのアップロード] を選択し、変更した 2 つのポリシー ファイルを拡張ポリシー (
TrustFrameworkExtensions.xml
など)、証明書利用者ポリシー (SignUpSignIn.xml
など) の順序でアップロードします。
カスタム ポリシーのテスト
- 証明書利用者ポリシー (
B2C_1A_signup_signin
など) を選択します。 - [アプリケーション] には、前に登録した Web アプリケーションを選択します。 [応答 URL] に
https://jwt.ms
と表示されます。 - [今すぐ実行] ボタンを選択します。
- サインアップまたはサインイン ページで [Apple] を選択して、Apple ID でサインインします。
サインイン プロセスが成功すると、ブラウザーは https://jwt.ms
にリダイレクトされ、Azure AD B2C によって返されたトークンの内容が表示されます。
ユーザー インターフェイスをカスタマイズする
[Apple でサインイン] を提供する方法に関するガイドラインに従ってください。 Apple では、ユーザーがアカウントを設定してサインインするのに使用できる [Apple でサインイン] ボタンをいくつか提供しています。 必要に応じて、[Apple でサインイン] を提供するカスタム ボタンを作成します。 [Apple でサインイン] ボタンを表示する方法をご確認ください。
Apple ユーザー インターフェイスのガイドラインに合わせるため、次を参照してください。
- HTML テンプレートを使用したユーザー インターフェイスのカスタマイズ
- ID プロバイダー名をローカライズする。