次の方法で共有


Azure Active Directory B2C を使用して SAML ID プロバイダーでサインアップとサインインを設定する

重要

2025 年 5 月 1 日より、Azure AD B2C は新規のお客様向けに購入できなくなります。 詳細については、FAQ を参照してください

Azure Active Directory B2C (Azure AD B2C) では、SAML 2.0 ID プロバイダーとのフェデレーションがサポートされています。 この記事では、SAML ID プロバイダーのユーザー アカウントでサインインを有効にして、ユーザーが既存のソーシャル ID またはエンタープライズ ID ( ADFSSalesforce など) でサインインできるようにする方法について説明します。

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

この機能は、カスタム ポリシーでのみ使用できます。 セットアップ手順については、前のセレクターで [カスタム ポリシー] を選択します。

シナリオの概要

ユーザーが外部のソーシャルまたはエンタープライズ SAML ID プロバイダー (IdP) からの資格情報を使用してアプリケーションにサインインできるように Azure AD B2C を構成できます。 Azure AD B2C は、SAML ID プロバイダーとフェデレーションするときに、 サービス プロバイダー として機能し、SAML ID プロバイダーへの SAML 要求を開始し、SAML 応答を待機します。 次の図で説明します。

  1. アプリケーションは、Azure AD B2C への承認要求を開始します。 アプリケーションには、 OAuth 2.0 または OpenId Connect アプリケーション、または SAML サービス プロバイダーを指定できます。
  2. Azure AD B2C サインイン ページで、ユーザーは SAML ID プロバイダー アカウント (Contoso など) を使用してサインインすることを選択 します。 Azure AD B2C は SAML 承認要求を開始し、ユーザーを SAML ID プロバイダーに移動してサインインを完了します。
  3. SAML ID プロバイダーは SAML 応答を返します。
  4. Azure AD B2C は SAML トークンを検証し、要求を抽出し、独自のトークンを発行して、ユーザーをアプリケーションに戻します。

SAML アイデンティティプロバイダーフローでサインイン

[前提条件]

ソリューションのコンポーネント

このシナリオでは、次のコンポーネントが必要です。

  • Azure AD B2C からの SAML 要求を受信、デコード、応答できる SAML ID プロバイダー
  • ID プロバイダーのパブリックに利用可能な SAML メタデータ エンドポイント
  • Azure AD B2C テナント

重要

エンドポイントは、Azure AD B2C のセキュリティ要件に準拠している必要があります。 古い TLS バージョンと暗号は非推奨です。 詳細については、 Azure AD B2C TLS と暗号スイートの要件に関するページを参照してください。

ポリシー キーを作成する

Azure AD B2C と SAML ID プロバイダーの間で信頼を確立するには、有効な X509 証明書に秘密キーを指定する必要があります。 Azure AD B2C は、証明書の秘密キーを使用して SAML 要求に署名します。 ID プロバイダーは、証明書の公開キーを使用して要求を検証します。 公開キーには、技術プロファイル メタデータを使用してアクセスできます。 または、.cer ファイルを SAML ID プロバイダーに手動でアップロードすることもできます。

ほとんどのシナリオでは、自己署名証明書を使用できます。 運用環境では、証明機関によって発行された X509 証明書を使用することをお勧めします。 また、このドキュメントで後述するように、非運用環境の場合は、両方の側で SAML 署名を無効にすることができます。

証明書を取得する

証明書をまだ持っていない場合は、自己署名証明書を使用できます。 自己署名証明書は、証明機関 (CA) によって署名されていないセキュリティ証明書であり、CA によって署名された証明書のセキュリティ保証を提供するものではありません。

Windows では、PowerShell の New-SelfSignedCertificate コマンドレットを使用して証明書を生成します。

  1. この PowerShell コマンドを実行して、自己署名証明書を生成します。 -Subject などのアプリケーションと Azure AD B2C のテナント名に合わせて contosowebapp.contoso.onmicrosoft.com 引数を変更します。 また、証明書に別の有効期限を指定するように -NotAfter 日付を調整することもできます。

    New-SelfSignedCertificate `
        -KeyExportPolicy Exportable `
        -Subject "CN=yourappname.yourtenant.onmicrosoft.com" `
        -KeyAlgorithm RSA `
        -KeyLength 2048 `
        -KeyUsage DigitalSignature `
        -NotAfter (Get-Date).AddMonths(12) `
        -CertStoreLocation "Cert:\CurrentUser\My"
    
  2. Windows コンピューターで、[ユーザー証明書の管理] を検索して選択します

  3. [ 証明書 - 現在のユーザー] で、[ 個人用>Certificates>yourappname.yourtenant.onmicrosoft.com を選択します。

  4. 証明書を選択し、 アクション>すべてのタスク>Export を選択します。

  5. [次へ>次へ] を選択し、秘密キーをエクスポートします>次へ

  6. [ ファイル形式のエクスポート] の既定値をそのまま使用し、[ 次へ] を選択します。

  7. [パスワード] オプションを有効にし、証明書のパスワードを入力して、[次へ] を選択します。

  8. 証明書を保存する場所を指定するには、[ 参照 ] を選択し、任意のディレクトリに移動します。

  9. [ 名前を付けて保存 ] ウィンドウで、 ファイル名を入力し、[保存] を選択 します

  10. [ 次へ>完了] を選択します。

Azure AD B2C で .pfx ファイルのパスワードを受け入れるには、Windows 証明書ストアのエクスポート ユーティリティで、AES256-SHA256 ではなく、TripleDES-SHA1 オプションを使用してパスワードを暗号化する必要があります。

証明書をアップロードする

証明書を Azure AD B2C テナントに格納する必要があります。

  1. Azure portal にサインインします。
  2. 複数のテナントにアクセスできる場合、上部のメニューの [設定] アイコンを選択し、[ディレクトリとサブスクリプション] メニューからお使いの Azure AD B2C テナントに切り替えます。
  3. Azure portal の左上隅にある [すべてのサービス] を選択してから、[Azure AD B2C] を検索して選択します。
  4. [概要] ページで、[Identity Experience Framework] を選びます。
  5. [ポリシー キー] を選択し、[追加] を選びます。
  6. [オプション] で、[Upload] を選択します。
  7. ポリシー キーの名前を入力します。 たとえば、SAMLSigningCert のようにします。 プレフィックス B2C_1A_ がキーの名前に自動的に追加されます。
  8. 秘密キーを持つ証明書 .pfx ファイルを参照して選択します。
  9. Create をクリックしてください。

SAML 技術プロファイルを構成する

ポリシーの拡張ファイルの ClaimsProviders 要素に追加して、SAML ID プロバイダーを定義します。 クレーム プロバイダーには、エンドポイントと SAML ID プロバイダーとの通信に必要なプロトコルを決定する SAML 技術プロファイルが含まれています。 SAML 技術プロファイルを使用してクレーム プロバイダーを追加するには:

  1. TrustFrameworkExtensions.xmlを開きます。

  2. ClaimsProviders 要素を検索します。 存在しない場合は、ルート要素の下に追加します。

  3. 次のように新しい ClaimsProvider を追加します。

    <ClaimsProvider>
      <Domain>Contoso.com</Domain>
      <DisplayName>Contoso</DisplayName>
      <TechnicalProfiles>
        <TechnicalProfile Id="Contoso-SAML2">
          <DisplayName>Contoso</DisplayName>
          <Description>Login with your SAML identity provider account</Description>
          <Protocol Name="SAML2"/>
          <Metadata>
            <Item Key="PartnerEntity">https://your-AD-FS-___domain/federationmetadata/2007-06/federationmetadata.xml</Item>
          </Metadata>
          <CryptographicKeys>
            <Key Id="SamlMessageSigning" StorageReferenceId="B2C_1A_SAMLSigningCert"/>
          </CryptographicKeys>
          <OutputClaims>
            <OutputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="assertionSubjectName" />
            <OutputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="first_name" />
            <OutputClaim ClaimTypeReferenceId="surname" PartnerClaimType="last_name" />
            <OutputClaim ClaimTypeReferenceId="displayName" PartnerClaimType="http://schemas.microsoft.com/identity/claims/displayname" />
            <OutputClaim ClaimTypeReferenceId="email"  />
            <OutputClaim ClaimTypeReferenceId="identityProvider" DefaultValue="contoso.com" />
            <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="socialIdpAuthentication" />
          </OutputClaims>
          <OutputClaimsTransformations>
            <OutputClaimsTransformation ReferenceId="CreateRandomUPNUserName"/>
            <OutputClaimsTransformation ReferenceId="CreateUserPrincipalName"/>
            <OutputClaimsTransformation ReferenceId="CreateAlternativeSecurityId"/>
            <OutputClaimsTransformation ReferenceId="CreateSubjectClaimFromAlternativeSecurityId"/>
          </OutputClaimsTransformations>
          <UseTechnicalProfileForSessionManagement ReferenceId="SM-Saml-idp"/>
        </TechnicalProfile>
      </TechnicalProfiles>
    </ClaimsProvider>
    

次の XML 要素を関連する値で更新します。

XML 要素 価値
クレームプロバイダー\ドメイン 直接サインインに使用されるドメイン名。 直接サインインで使用するドメイン名を入力します。 たとえば、 Contoso.com
技術プロファイル\表示名 この値は、サインイン画面のサインイン ボタンに表示されます。 たとえば、 Contoso などです。
メタデータ\パートナーエンティティ SAML ID プロバイダーのメタデータの URL。 または、ID プロバイダーのメタデータをコピーし、CDATA 要素 <![CDATA[Your IDP metadata]]>内に追加することもできます。

要求をマップする

OutputClaims 要素には、SAML ID プロバイダーによって返される要求の一覧が含まれています。 あなたのポリシーで定義されたクレームの名前を、ID プロバイダーで定義されたアサーション名にマップします。 ID プロバイダーでクレーム (アサーション) の一覧を確認します。 詳細については、「 要求マッピング」を参照してください。

上記の例では、 Contoso-SAML2 には、SAML ID プロバイダーによって返される要求が含まれています。

  • assertionSubjectName 要求は issuerUserId 要求にマップされます。
  • first_name要求は、givenName 要求にマップされます。
  • last_name要求は要求にマップされます。
  • http://schemas.microsoft.com/identity/claims/displayname要求は displayName 要求にマップされます。
  • どの名前にもマップされていない email 要求。

技術プロファイルは、ID プロバイダーによって返されない要求も返します。

  • ID プロバイダーの名前を含む identityProvider 要求。
  • authenticationSource クレームの既定値は socialIdpAuthentication です。

SAML セッション技術プロファイルを追加する

SM-Saml-idp SAML セッション技術プロファイルがまだない場合は、拡張機能ポリシーに追加します。 <ClaimsProviders> セクションを見つけて、次の XML スニペットを追加します。 ポリシーに SM-Saml-idp 技術プロファイルが既に含まれている場合は、次の手順に進みます。 詳細については、「 シングル サインオン セッション管理」を参照してください。

<ClaimsProvider>
  <DisplayName>Session Management</DisplayName>
  <TechnicalProfiles>
    <TechnicalProfile Id="SM-Saml-idp">
      <DisplayName>Session Management Provider</DisplayName>
      <Protocol Name="Proprietary" Handler="Web.TPEngine.SSO.SamlSSOSessionProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
      <Metadata>
        <Item Key="IncludeSessionIndex">false</Item>
        <Item Key="RegisterServiceProviders">false</Item>
      </Metadata>
    </TechnicalProfile>
  </TechnicalProfiles>
</ClaimsProvider>

ユーザー体験を追加する

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

  1. スターター パックから TrustFrameworkBase.xml ファイルを開きます。
  2. を含む Id="SignUpOrSignIn" 要素の内容全体を検索してコピーします。
  3. TrustFrameworkExtensions.xml を開き、UserJourneys 要素を見つけます。 要素が存在しない場合は、要素を追加します。
  4. UserJourneys 要素の子としてコピーした UserJourney 要素の内容全体を貼り付けます。
  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="ContosoExchange" />
  </ClaimsProviderSelections>
  ...
</OrchestrationStep>

<OrchestrationStep Order="2" Type="ClaimsExchange">
  ...
  <ClaimsExchanges>
    <ClaimsExchange Id="ContosoExchange" TechnicalProfileReferenceId="Contoso-SAML2" />
  </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など)。

SAML ID プロバイダーを構成する

ポリシーを構成したら、Azure AD B2C SAML メタデータを使用して SAML ID プロバイダーを構成する必要があります。 SAML メタデータは、ポリシー ( サービス プロバイダー) の構成を公開するために SAML プロトコルで使用される情報です。 サインインとサインアウト、証明書、サインイン方法など、サービスの場所を定義します。

各 SAML ID プロバイダーには、サービス プロバイダーを設定するための異なる手順があります。 一部の SAML ID プロバイダーは Azure AD B2C メタデータを要求しますが、他のプロバイダーではメタデータ ファイルを手動で操作して情報を提供する必要があります。 ガイダンスについては、ID プロバイダーのドキュメントを参照してください。

次の例は、Azure AD B2C 技術プロファイルの SAML メタデータの URL アドレスを示しています。

https://<your-tenant-name>.b2clogin.com/<your-tenant-name>.onmicrosoft.com/<your-policy>/samlp/metadata?idptp=<your-technical-profile>

カスタム ドメインを使用する場合は、次の形式を使用します。

https://your-___domain-name/<your-tenant-name>.onmicrosoft.com/<your-policy>/samlp/metadata?idptp=<your-technical-profile>

次の値を置き換えます。

  • your-tenant-name を実際のテナント名 (your-tenant.onmicrosoft.com など) に。
  • your-___domain-name を、ログイン.contoso.com などのカスタム ドメイン名に置き換えます。
  • your-policy を実際のポリシー名に。 たとえば、B2C_1A_signup_signin_adfs にします。
  • your-technical-profile は、あなたの SAML ID プロバイダーの技術プロファイルの名前です。 たとえば、Contoso-SAML2 などです。

ブラウザーを開き、URL に移動します。 正しい URL を入力し、XML メタデータ ファイルにアクセスできることを確認します。

カスタム ポリシーをテストする

  1. Azure portal にサインインします。
  2. 複数のテナントにアクセスできる場合、上部のメニューの [設定] アイコンを選択し、[ディレクトリとサブスクリプション] メニューからお使いの Azure AD B2C テナントに切り替えます。
  3. Azure portal で、 [Azure AD B2C] を検索して選択します。
  4. [ポリシー] で、[Identity Experience Framework] を選択します
  5. 関連パーティポリシー(例: B2C_1A_signup_signin)を選択してください。
  6. [ アプリケーション] で、 以前に登録した Web アプリケーションを選択します。 応答 URLhttps://jwt.msが表示されます。
  7. [ 今すぐ実行 ] ボタンを選択します。
  8. サインアップまたはサインイン ページで、Contoso を選択して Contoso アカウントでサインインします。

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

次のステップ