Azure Active Directory B2C を使って、Apple ID でのサインアップとサインインを設定する

"開始する前に"、[ポリシーの種類の選択] セレクターを使用して、設定するポリシーの種類を選択します。 Azure Active Directory B2C には、ユーザーがアプリケーションを操作する方法を定義する 2 つの方法 (定義済みのユーザー フローを使用する、または完全に構成可能なカスタム ポリシーを使用する) があります。 この記事で必要な手順は、方法ごとに異なります。

注意

Azure Active Directory B2C で、カスタム ポリシーは、主に、複雑なシナリオに取り組む用途向けに設計されています。 ほとんどのシナリオで、組み込みユーザー フローを使用することをお勧めします。 まだ行っていない場合は、Active Directory B2C でのカスタム ポリシーの概要に関する記事で、カスタム ポリシー スターター パックの詳細を確認してください。

前提条件

Apple ID アプリケーションを作成する

Azure Active Directory B2C (Azure AD B2C) で Apple ID でのユーザーのサインインを有効にするには、https://developer.apple.com でアプリケーションを作成する必要があります。 詳細については、Apple でのサインインに関するページを参照してください。 まだ Apple Developer アカウントを持っていない場合は、Apple Developer Program でサインアップできます。

  1. アカウントの資格情報を使用して Apple Developer ポータルにサインインします。
  2. メニューから、[Certificates, IDs, & Profiles](証明書、ID、プロファイル) を選択し、(+) を選択します。
  3. [Register a New Identifier](新しい ID の登録)[App IDs](アプリ ID) を選択し、 [続行] を選択します。
  4. [種類の選択](Select a type)[App](アプリ) を選択し、 [続行] を選択します。
  5. [Register an App ID]\(アプリ ID の登録\) の場合:
    1. [Description](説明) を入力します。
    2. [Bundle ID](バンドル ID) を入力します (例: com.contoso.azure-ad-b2c)。
    3. [Capabilities](機能) については、機能の一覧から [Sign in with Apple](Apple でサインイン) を選択します。
    4. この手順で チーム ID (アプリ ID のプレフィックス) をメモしておいてください。 この情報は後で必要になります。
    5. [Continue](続行)[Register](登録) の順に選択します。
  6. メニューから、[Certificates, IDs, & Profiles](証明書、ID、プロファイル) を選択し、(+) を選択します。
  7. [Register a New Identifier](新しい ID の登録)[Services IDs](サービス ID) を選択し、 [続行] を選択します。
  8. [Register a Services ID]\(サービス ID の登録\) の場合:
    1. [Description](説明) を入力します。 この説明は、同意画面でユーザーに表示されます。
    2. [Identifier](識別子) を入力します (例: com.consoto.azure-ad-b2c-service)。 サービス ID 識別子をメモしておきます。 この識別子は、OpenID Connect フローのクライアント ID です。
    3. [Continue](続行) を選択し、次に [Register](登録) を選択します。
  9. [Identifiers](識別子) から、作成した識別子を選択します。
  10. [Sign In with Apple](Apple でサインイン) を選択し、 [Configure](構成) を選択します。
    1. Apple でのサインインを構成する [Primary App ID](プライマリ アプリ ID) を選択します。
    2. [Domains and Subdomains](ドメインとサブドメイン)your-tenant-name.b2clogin.com を入力します。 your-tenant-name をテナントの名前に置き換えます。 カスタム ドメインを使用する場合は、「https://your-domain-name」と入力します。
    3. [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 はすべて小文字である必要があります。
    4. [次へ] を選択し、 [Done](完了) を選択します。
    5. ポップアップ ウィンドウが閉じたら、 [続行] を選択し、 [保存] を選択します。

Apple クライアント シークレットの作成

  1. Apple Developer ポータルのメニューから、 [Keys](キー) を選択し、 (+) を選択します。
  2. [Register a New Key]\(新しいキーの登録\) の場合:
    1. キー名を入力します。
    2. [Sign in with Apple](Apple でサインイン) を選択し、 [続行] を選択します。
    3. [Primary App ID](プライマリ アプリ ID) では、以前に作成したアプリを選択し、 [保存] を選択します。
    4. [Configure](構成) を選択し、次に [Register](登録) を選択してキー登録プロセスを終了します。 キー ID をメモしておきます。 このキーは、ユーザー フローを構成するときに必要になります。
  3. [Download Your Key](キーのダウンロード) では、 [Download](ダウンロード) を選択して、自分のキーが含まれている .p8 ファイルをダウンロードします。

Apple を ID プロバイダーとして構成する

  1. Azure AD B2C テナントの全体管理者として Azure portal にサインインします。
  2. 複数のテナントにアクセスできる場合、上部のメニューの [設定] アイコンを選択し、[ディレクトリとサブスクリプション] メニューからお使いの Azure AD B2C テナントに切り替えます。
  3. [Azure サービス] で、 [Azure AD B2C] を選択します。 または、検索ボックスを使用して検索し、 [Azure AD B2C] を選択します。
  4. [ID プロバイダー] を選んでから、 [Apple] を選びます。
  5. [名前] には、「Apple でサインイン」と入力します。
  6. Apple Developer ID (チーム ID) を入力します。
  7. Apple サービス ID (クライアント ID) を入力します。
  8. Apple クライアント シークレットの作成」の手順の Apple キー ID を入力します。
  9. Apple 証明書データを選択してアップロードします。
  10. [保存] を選択します。

重要

  • Apple でのサインインでは、管理者が 6 か月ごとにクライアント シークレットを更新する必要があります。
  • Apple クライアント シークレットは、有効期限が切れると自動的に更新されます。 シークレットを手動で更新する必要がある場合は、Azure portal で Azure AD B2C を開き、 [ID プロバイダー]>[Apple] にアクセスし、 [シークレットの更新] を選びます。
  • [Apple でサインイン] ボタンを提供する方法に関するガイドラインに従ってください。

Apple ID プロバイダーをユーザー フローに追加する

ユーザーが Apple ID を使用してサインインできるようにするには、Apple ID プロバイダーをユーザー フローに追加する必要があります。 Apple でのサインインは、推奨されるバージョンのユーザー フローに対してのみ構成できます。 Apple ID プロバイダーをユーザー フローに追加するには、次のようにします。

  1. Azure AD B2C テナントで、 [ユーザー フロー] を選択します。
  2. Apple ID プロバイダーを追加するユーザー フローを選択します。
  3. [ソーシャル ID プロバイダー] で、 [Apple] を選びます。
  4. [保存] を選択します。
  5. ポリシーをテストするには、 [ユーザー フローを実行します] を選択します。
  6. [アプリケーション] には、以前に登録した testapp1 という名前の Web アプリケーションを選択します。 [応答 URL]https://jwt.ms と表示されます。
  7. [ユーザー フローを実行します] ボタンを選択します。
  8. サインアップまたはサインイン ページで [Apple] を選択して、Apple ID でサインインします。

サインイン プロセスが成功すると、ブラウザーは https://jwt.ms にリダイレクトされ、Azure AD B2C によって返されたトークンの内容が表示されます。

クライアント シークレットの署名

前にダウンロードした .p8 ファイルを使用して、クライアント シークレットで JWT に署名します。 JWT の作成と署名に使用できるライブラリは多数あります。 トークンを作成する Azure 関数を使用します。

  1. Azure 関数 を作成します。

  2. Developer で、 [コードとテスト] を選択します。

  3. run.csx ファイルの内容をコピーし、エディターに貼り付けます。

  4. [保存] を選択します。

  5. 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 テナントで前に記録したクライアント シークレットを格納する必要があります。

  1. Azure portal にサインインします。
  2. 複数のテナントにアクセスできる場合、上部のメニューの [設定] アイコンを選択し、[ディレクトリとサブスクリプション] メニューからお使いの Azure AD B2C テナントに切り替えます。
  3. [Azure サービス] で、 [Azure AD B2C] を選択します。 または、検索ボックスを使用して検索し、 [Azure AD B2C] を選択します。
  4. [概要] ページで、 [Identity Experience Framework] を選択します。
  5. [ポリシー キー] を選択し、 [追加] を選択します。
  6. [オプション] では、 [手動] を選びます。
  7. ポリシー キーの名前を入力します。 例: "AppleSecret"。 プレフィックス "B2C_1A_" がキーの名前に自動的に追加されます。
  8. [シークレット] に、Azure 関数 によって返されるトークンの値を入力します (JWT トークン)。
  9. [キー使用法] には [署名] を選択します。
  10. [作成] を選択します

重要

  • Apple でのサインインでは、管理者が 6 か月ごとにクライアント シークレットを更新する必要があります。
  • Apple クライアント シークレットの有効期限が切れた場合は、手動で更新し、新しい値をポリシー キーに格納する必要があります。
  • 6 か月以内の独自のリマインダーを設定して、新しいクライアント シークレットを生成することをお勧めします。
  • [Apple でサインイン] ボタンを提供する方法に関するガイドラインに従ってください。

Apple を ID プロバイダーとして構成する

ユーザーが Apple ID を使用してサインインできるようにするには、そのアカウントを Azure AD B2C がエンドポイント経由で通信できる相手のクレーム プロバイダーとして定義する必要があります。 エンドポイントでは、特定のユーザーが認証されていることを確認するために Azure AD B2C で使用される一連のクレームが提供されます。

Apple ID をクレーム プロバイダーとして定義するには、それをポリシーの拡張ファイル内の ClaimsProviders 要素に追加します。

  1. TrustFrameworkExtensions.xml を開きます。

  2. ClaimsProviders 要素を見つけます。 存在しない場合は、それをルート要素の下に追加します。

  3. 新しい 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>
    
  4. client_id をサービス ID に設定します。 たとえば、「 com.consoto.azure-ad-b2c-service 」のように入力します。

  5. ファイルを保存します。

ユーザー体験を追加する

この時点では、ID プロバイダーはセットアップされていますが、サインイン ページではまだ使用できません。 独自のカスタム ユーザー体験がない場合は、既存のテンプレート ユーザー体験の複製を作成してください。そうでない場合は、次の手順に進みます。

  1. スターター パックから TrustFrameworkBase.xml ファイルを開きます。
  2. Id="SignUpOrSignIn" を含む UserJourney 要素を見つけ、その内容全体をコピーします。
  3. TrustFrameworkExtensions.xml を開き、UserJourneys 要素を見つけます。 要素が存在しない場合は追加します。
  4. コピーした UserJourney 要素の内容全体を UserJourneys 要素の子として貼り付けます。
  5. ユーザー体験の ID の名前を変更します。 たとえば、「 Id="CustomSignUpSignIn" 」のように入力します。

ユーザー体験に ID プロバイダーを追加する

これでユーザー体験ができたので、ユーザー体験に新しい ID プロバイダーを追加します。 最初にサインイン ボタンを追加してから、ボタンをアクションにリンクします。 アクションは、前に作成した技術プロファイルです。

  1. ユーザー体験内で、Type="CombinedSignInAndSignUp" または Type="ClaimsProviderSelection" を含むオーケストレーション ステップ要素を見つけます。 これは通常、最初のオーケストレーション ステップです。 ClaimsProviderSelections 要素には、ユーザーがサインインに使用できる ID プロバイダーの一覧が含まれています。 要素の順序により、ユーザーに表示されるサインイン ボタンの順序が制御されます。 ClaimsProviderSelection XML 要素を追加します。 TargetClaimsExchangeId の値をフレンドリ名に設定します。

  2. 次のオーケストレーション ステップで、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 ユーザー体験について、ReferenceIdCustomSignUpSignIn に設定しています。

<RelyingParty>
  <DefaultUserJourney ReferenceId="CustomSignUpSignIn" />
  ...
</RelyingParty>

カスタム ポリシーをアップロードする

  1. Azure portal にサインインします。
  2. ポータル ツール バーにある [ディレクトリ + サブスクリプション] アイコンを選択し、Azure AD B2C テナントを含むディレクトリを選択します。
  3. Azure portal で、 [Azure AD B2C] を検索して選択します。
  4. [ポリシー][Identity Experience Framework] を選択します。
  5. [カスタム ポリシーのアップロード] を選択し、変更した 2 つのポリシー ファイルを拡張ポリシー (TrustFrameworkExtensions.xml など)、証明書利用者ポリシー (SignUpSignIn.xmlなど) の順序でアップロードします。

カスタム ポリシーのテスト

  1. 証明書利用者ポリシー (B2C_1A_signup_signin など) を選択します。
  2. [アプリケーション] には、前に登録した Web アプリケーションを選択します。 [応答 URL]https://jwt.ms と表示されます。
  3. [今すぐ実行] ボタンを選択します。
  4. サインアップまたはサインイン ページで [Apple] を選択して、Apple ID でサインインします。

サインイン プロセスが成功すると、ブラウザーは https://jwt.ms にリダイレクトされ、Azure AD B2C によって返されたトークンの内容が表示されます。

ユーザー インターフェイスをカスタマイズする

[Apple でサインイン] を提供する方法に関するガイドラインに従ってください。 Apple では、ユーザーがアカウントを設定してサインインするのに使用できる [Apple でサインイン] ボタンをいくつか提供しています。 必要に応じて、[Apple でサインイン] を提供するカスタム ボタンを作成します。 [Apple でサインイン] ボタンを表示する方法をご確認ください。

Apple ユーザー インターフェイスのガイドラインに合わせるため、次を参照してください。