SAML アプリケーションを Azure AD B2C に登録するRegister a SAML application in Azure AD B2C

この記事では、アプリケーションに対して Security Assertion Markup Language (SAML) ID プロバイダー (IdP) として機能するように Azure Active Directory B2C (Azure AD B2C) を構成する方法について説明します。In this article, you learn how to configure Azure Active Directory B2C (Azure AD B2C) to act as a Security Assertion Markup Language (SAML) identity provider (IdP) to your applications.

シナリオの概要Scenario overview

顧客 ID およびアクセス管理ソリューションとして Azure AD B2C を使用する組織では、ID プロバイダー、または SAML プロトコルを使用して認証するように構成されたアプリケーションとのやり取りが必要になる場合があります。Organizations that use Azure AD B2C as their customer identity and access management solution might require interaction with identity providers or applications that are configured to authenticate using the SAML protocol.

Azure AD B2C は、次の 2 つの方法のいずれかで SAML 相互運用性を実現します。Azure AD B2C achieves SAML interoperability in one of two ways:

  • "ID プロバイダー" (IdP) として機能し、SAML ベースのサービス プロバイダー (アプリケーション) でシングル サインオン (SSO) を実現するBy acting as an identity provider (IdP) and achieving single-sign-on (SSO) with SAML-based service providers (your applications)
  • "サービス プロバイダー" (SP) として機能し、Salesforce や ADFS など、SAML ベースの ID プロバイダーとやり取りするBy acting as a service provider (SP) and interacting with SAML-based identity providers like Salesforce and ADFS

左側が ID プロバイダーとして機能する B2C、右側がサービスプロバイダーとして機能する B2C の図

SAML を使用した非排他的な 2 つの主要なシナリオの概要:Summarizing the two non-exclusive core scenarios with SAML:

シナリオScenario Azure AD B2C のロールAzure AD B2C role 操作方法How-to
私のアプリケーションで、SAML アサーションが認証を完了することが想定されている。My application expects a SAML assertion to complete an authentication. Azure AD B2C は、ID プロバイダー (IdP) として機能するAzure AD B2C acts as the identity provider (IdP)
Azure AD B2C は、アプリケーションに対する SAML IdP として機能します。Azure AD B2C acts as a SAML IdP to the applications.
この記事This article.
私のユーザーは、ADFS、Salesforce、Shibboleth など、SAML 準拠の ID プロバイダーでシングル サイン オンを行う必要がある。My users need single-sign-on with a SAML-compliant identity provider like ADFS, Salesforce, or Shibboleth. Azure AD B2C は、サービス プロバイダー (SP) として機能するAzure AD B2C acts as the service provider (SP)
Azure AD B2C は、SAML ID プロバイダーに接続するときにサービス プロバイダーとして機能します。Azure AD B2C acts as a service provider when connecting to the SAML identity provider. アプリケーションと SAML ID プロバイダーの間のフェデレーション プロキシです。It's a federation proxy between your application and the SAML identity provider.

前提条件Prerequisites

  • Azure AD B2C でのカスタム ポリシーの概要」の手順を完了します。Complete the steps in Get started with custom policies in Azure AD B2C. この記事で説明されているカスタム ポリシー スターター パックの SocialAndLocalAccounts カスタム ポリシーが必要です。You need the SocialAndLocalAccounts custom policy from the custom policy starter pack discussed in the article.
  • Security Assertion Markup Language (SAML) プロトコルに関する基本的な知識。Basic understanding of the Security Assertion Markup Language (SAML) protocol.
  • SAML サービス プロバイダー (SP) として構成された Web アプリ。A web application configured as a SAML service provider (SP). このチュートリアルでは、用意されている SAML テスト アプリケーションを使用できます。For this tutorial, you can use a SAML test application that we provide.

ソリューションのコンポーネントComponents of the solution

このシナリオでは、次の 3 つの主要なコンポーネントが必要です。There are three main components required for this scenario:

  • SAML 要求を送信し、Azure AD B2C から SAML アサーションを受信、デコード、応答する機能を持つ SAML サービス プロバイダーSAML service provider with the ability to send SAML requests, and receive, decode, and respond to SAML assertions from Azure AD B2C. サービス プロバイダーは、証明書利用者アプリケーションとも呼ばれます。Service provider is also known as the relying party application.
  • サービス プロバイダー向けに公開されている SAML メタデータ エンドポイントPublicly available SAML metadata endpoint for your service provider.
  • Azure AD B2C テナントAzure AD B2C tenant

SAML サービス プロバイダーと関連のメタデータ エンドポイントがまだない場合は、テスト向けに用意されているこのサンプル SAML アプリケーションを使用できます。If you don't yet have a SAML service provider and an associated metadata endpoint, you can use this sample SAML application that we've made available for testing:

SAML テスト アプリケーションSAML Test Application

1.証明書を設定する1. Set up certificates

サービス プロバイダーと Azure AD B2C の間に信頼関係を構築するには、Web アプリの X509 証明書を用意する必要があります。To build a trust relationship between your service provider and Azure AD B2C, you need to provide the web app X509 certificates.

  • サービス プロバイダーの証明書Service provider certificates
    • 秘密キーが Web アプリに保存されている証明書。Certificate with a private key stored in your Web App. この証明書は、Azure AD B2C に送信される SAML 要求に署名するためにサービス プロバイダーによって使用されます。This certificate is used by your service provider to sign the SAML request sent to Azure AD B2C. Azure AD B2C では、サービス プロバイダーのメタデータから公開キーを読み取り、署名が検証されます。Azure AD B2C reads the public key from the service provider metadata to validate the signature.
    • (省略可能) 秘密キーが Web アプリに保存されている証明書。(Optional) Certificate with a private key stored in your Web App. Azure AD B2C では、サービス プロバイダーのメタデータから公開キーを読み取り、SAML アサーションが暗号化されます。Azure AD B2C reads the public key from the service provider metadata to encrypt the SAML assertion. 次に、サービス プロバイダーにより、秘密キーを使用してアサーションの暗号化が解除されます。The service provider then uses the private key to decrypt the assertion.
  • Azure AD B2C の証明書Azure AD B2C certificates
    • Azure AD B2C に秘密キーがある証明書。Certificate with a private key in Azure AD B2C. この証明書は、サービス プロバイダーに送信される SAML 応答に署名するために Azure AD B2C によって使用されます。This certificate is used by Azure AD B2C to sign the SAML response sent to your service provider. サービス プロバイダーでは、Azure AD B2C メタデータの公開キーを読み取り、SAML 応答の署名が検証されます。Your service provider reads the Azure AD B2C metadata public key to validate the signature of the SAML response.

公開証明機関によって発行された証明書、またはこのチュートリアルでは自己署名証明書を使用できます。You can use a certificate issued by a public certificate authority or, for this tutorial, a self-signed certificate.

1.1 自己署名証明書を準備する1.1 Prepare a self-signed certificate

証明書をまだ持っていない場合は、このチュートリアルでは自己署名証明書を使用できます。If you don't already have a certificate, you can use a self-signed certificate for this tutorial. Windows では、PowerShell の New-SelfSignedCertificate コマンドレットを使用して証明書を生成できます。On Windows, you can use PowerShell's New-SelfSignedCertificate cmdlet to generate a certificate.

  1. この PowerShell コマンドを実行して、自己署名証明書を生成します。Execute this PowerShell command to generate a self-signed certificate. アプリケーションと Azure AD B2C のテナント名に合わせて -Subject 引数を変更します。Modify the -Subject argument as appropriate for your application and Azure AD B2C tenant name. また、証明書に別の有効期限を指定するように -NotAfter 日付を調整することもできます。You can also adjust the -NotAfter date to specify a different expiration for the certificate.

    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. [ユーザー証明書の管理] > [現在のユーザー] > [個人用] > [証明書] > yourappname.yourtenant.onmicrosoft.com を開きますOpen Manage user certificates > Current User > Personal > Certificates > yourappname.yourtenant.onmicrosoft.com

  3. 証明書 > [アクション] > [すべてのタスク] > [エクスポート] を選択しますSelect the certificate > Action > All Tasks > Export

  4. [はい] > [次へ] > [はい、秘密キーをエクスポートします] > [次へ] を選択しますSelect Yes > Next > Yes, export the private key > Next

  5. [エクスポート ファイルの形式] の既定値を受け入れますAccept the defaults for Export File Format

  6. 証明書のパスワードを指定しますProvide a password for the certificate

1.2 証明書をアップロードする1.2 Upload the certificate

次に、SAML アサーションと応答署名証明書を Azure AD B2C にアップロードします。Next, upload the SAML assertion and response signing certificate to Azure AD B2C.

  1. Azure portal にサインインし、Azure AD B2C テナントを参照します。Sign in to the Azure portal and browse to your Azure AD B2C tenant.
  2. [ポリシー] で、 [Identity Experience Framework][ポリシー キー] の順に選択します。Under Policies, select Identity Experience Framework and then Policy keys.
  3. [追加] を選択してから、 [オプション] > [アップロード] を選択します。Select Add, and then select Options > Upload.
  4. [名前] に「SamlIdpCert」などを入力します。Enter a Name, for example SamlIdpCert. プレフィックス B2C_1A_ がキーの名前に自動的に追加されます。The prefix B2C_1A_ is automatically added to the name of your key.
  5. ファイルのアップロード コントロールを使用して証明書をアップロードします。Upload your certificate using the upload file control.
  6. 証明書のパスワードを入力します。Enter the certificate's password.
  7. [作成] を選択しますSelect Create.
  8. キーが想定どおりに表示されることを確認します。Verify that the key appears as expected. たとえば、B2C_1A_SamlIdpCert です。For example, B2C_1A_SamlIdpCert.

2.ドライブを準備する2. Prepare your policy

2.1 SAML トークン発行者を作成する2.1 Create the SAML token issuer

次に、SAML トークン発行者SAML セッション プロバイダー技術プロファイルを使用して、SAML トークンを発行するためのテナントの機能を追加します。Now, add the capability for your tenant to issue SAML tokens, using SAML token issuer and SAML session provider technical profiles.

カスタム ポリシー スターター パックの SocialAndLocalAccounts\TrustFrameworkExtensions.xml を開きます。Open SocialAndLocalAccounts\TrustFrameworkExtensions.xml in the custom policy starter pack.

<ClaimsProviders> セクションを見つけて、次の XML スニペットを追加します。Locate the <ClaimsProviders> section and add the following XML snippet.

IssuerUri メタデータの値を変更できます。You can change the value of the IssuerUri metadata. これは Azure AD B2C からの SAML 応答で返される発行者の URI です。This is the issuer URI that is returned in the SAML response from Azure AD B2C. SAML アサーションの検証中に発行者の URI を受け入れるように証明書利用者アプリケーションを構成する必要があります。Your relying party application should be configured to accept an issuer URI during SAML assertion validation.

<ClaimsProvider>
  <DisplayName>Token Issuer</DisplayName>
  <TechnicalProfiles>

    <!-- SAML Token Issuer technical profile -->
    <TechnicalProfile Id="Saml2AssertionIssuer">
      <DisplayName>Token Issuer</DisplayName>
      <Protocol Name="SAML2"/>
      <OutputTokenFormat>SAML2</OutputTokenFormat>
      <Metadata>
        <!-- The issuer contains the policy name; it should be the same name as configured in the relying party application. B2C_1A_signup_signin_SAML is used below. -->
        <!--<Item Key="IssuerUri">https://tenant-name.b2clogin.com/tenant-name.onmicrosoft.com/B2C_1A_signup_signin_saml</Item>-->
      </Metadata>
      <CryptographicKeys>
        <Key Id="MetadataSigning" StorageReferenceId="B2C_1A_SamlIdpCert"/>
        <Key Id="SamlAssertionSigning" StorageReferenceId="B2C_1A_SamlIdpCert"/>
        <Key Id="SamlMessageSigning" StorageReferenceId="B2C_1A_SamlIdpCert"/>
      </CryptographicKeys>
      <InputClaims/>
      <OutputClaims/>
      <UseTechnicalProfileForSessionManagement ReferenceId="SM-Saml-issuer"/>
    </TechnicalProfile>

    <!-- Session management technical profile for SAML based tokens -->
    <TechnicalProfile Id="SM-Saml-issuer">
      <DisplayName>Session Management Provider</DisplayName>
      <Protocol Name="Proprietary" Handler="Web.TPEngine.SSO.SamlSSOSessionProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
    </TechnicalProfile>

  </TechnicalProfiles>
</ClaimsProvider>

3.SAML 証明書利用者ポリシーを追加する3. Add the SAML relying party policy

テナントが SAML アサーションを発行できるようになったので、SAML 証明書利用者ポリシーを作成し、JWT ではなく SAML アサーションを発行するようにユーザー体験を変更する必要があります。Now that your tenant can issue SAML assertions, you need to create the SAML relying party policy, and modify the user journey so that it issues a SAML assertion instead of a JWT.

3.1 サインアップまたはサインイン ポリシーを作成する3.1 Create sign-up or sign-in policy

  1. スターター パックの作業ディレクトリに SignUpOrSignin ファイルのコピーを作成して、新しい名前で保存します。Create a copy of the SignUpOrSignin.xml file in your starter pack working directory and save it with a new name. たとえば、SignUpOrSigninSAML.xml です。For example, SignUpOrSigninSAML.xml. これが自分の証明書利用者ポリシー ファイルです。This is your relying party policy file.

  2. 任意のエディターで SignUpOrSigninSAML ファイルを開きます。Open the SignUpOrSigninSAML.xml file in your preferred editor.

  3. 次に示すように、ポリシーの PolicyIdPublicPolicyUriB2C_1A_signup_signin_samlhttp://tenant-name.onmicrosoft.com/B2C_1A_signup_signin_saml に変更します。Change the PolicyId and PublicPolicyUri of the policy to B2C_1A_signup_signin_saml and http://tenant-name.onmicrosoft.com/B2C_1A_signup_signin_saml as seen below.

    <TrustFrameworkPolicy
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns="http://schemas.microsoft.com/online/cpim/schemas/2013/06"
    PolicySchemaVersion="0.3.0.0"
    TenantId="tenant-name.onmicrosoft.com"
    PolicyId="B2C_1A_signup_signin_saml"
    PublicPolicyUri="http://tenant-name.onmicrosoft.com/B2C_1A_signup_signin_saml">
    
  4. <RelyingParty> 要素の下に次の XML スニペットを追加します。Add following XML snippet just before the <RelyingParty> element. この XML により、SignUpOrSignIn ユーザー体験のオーケストレーション ステップ番号 7 が上書きされます。This XML overwrites orchestration step number 7 of the SignUpOrSignIn user journey. スターター パックの別のフォルダーから開始した場合、またはオーケストレーション ステップを追加または削除してユーザー体験をカスタマイズした場合は、番号 (order 要素内) が、ユーザー体験でトークン発行者ステップに対して指定されている番号と一致していることを確認します (たとえば、スターター パックの別のフォルダーで、LocalAccounts に対してステップ番号 4、SocialAccounts に対して 6、SocialAndLocalAccountsWithMfa に対して 9)。If you started from a different folder in the starter pack, or customized your user journey by adding or removing orchestration steps, make sure the number (in the order element) is aligned with the one specified in the user journey for the token issuer step (for example, in the other starter pack folders it's step number 4 for LocalAccounts, 6 for SocialAccounts and 9 for SocialAndLocalAccountsWithMfa).

    <UserJourneys>
      <UserJourney Id="SignUpOrSignIn">
        <OrchestrationSteps>
          <OrchestrationStep Order="7" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="Saml2AssertionIssuer"/>
        </OrchestrationSteps>
      </UserJourney>
    </UserJourneys>
    
  5. <RelyingParty> 要素の <TechnicalProfile> 要素全体を次のテクニカル プロファイル XML に置き換えます。Replace the entire <TechnicalProfile> element in the <RelyingParty> element with the following technical profile XML.

    <TechnicalProfile Id="PolicyProfile">
      <DisplayName>PolicyProfile</DisplayName>
      <Protocol Name="SAML2"/>
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="displayName" />
        <OutputClaim ClaimTypeReferenceId="givenName" />
        <OutputClaim ClaimTypeReferenceId="surname" />
        <OutputClaim ClaimTypeReferenceId="email" DefaultValue="" />
        <OutputClaim ClaimTypeReferenceId="identityProvider" DefaultValue="" />
        <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="objectId"/>
      </OutputClaims>
      <SubjectNamingInfo ClaimType="objectId" ExcludeAsClaim="true"/>
    </TechnicalProfile>
    
  6. Azure AD B2C テナントの名前で tenant-name を更新します。Update tenant-name with the name of your Azure AD B2C tenant.

証明書利用者ポリシー ファイルは最終的に次の XML コードのようになります。Your final relying party policy file should look like the following XML code:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<TrustFrameworkPolicy
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns="http://schemas.microsoft.com/online/cpim/schemas/2013/06"
  PolicySchemaVersion="0.3.0.0"
  TenantId="contoso.onmicrosoft.com"
  PolicyId="B2C_1A_signup_signin_saml"
  PublicPolicyUri="http://contoso.onmicrosoft.com/B2C_1A_signup_signin_saml">

  <BasePolicy>
    <TenantId>contoso.onmicrosoft.com</TenantId>
    <PolicyId>B2C_1A_TrustFrameworkExtensions</PolicyId>
  </BasePolicy>

  <UserJourneys>
    <UserJourney Id="SignUpOrSignIn">
      <OrchestrationSteps>
        <OrchestrationStep Order="7" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="Saml2AssertionIssuer"/>
      </OrchestrationSteps>
    </UserJourney>
  </UserJourneys>

  <RelyingParty>
    <DefaultUserJourney ReferenceId="SignUpOrSignIn" />
    <TechnicalProfile Id="PolicyProfile">
      <DisplayName>PolicyProfile</DisplayName>
      <Protocol Name="SAML2"/>
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="displayName" />
        <OutputClaim ClaimTypeReferenceId="givenName" />
        <OutputClaim ClaimTypeReferenceId="surname" />
        <OutputClaim ClaimTypeReferenceId="email" DefaultValue="" />
        <OutputClaim ClaimTypeReferenceId="identityProvider" DefaultValue="" />
        <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="objectId"/>
      </OutputClaims>
      <SubjectNamingInfo ClaimType="objectId" ExcludeAsClaim="true"/>
    </TechnicalProfile>
  </RelyingParty>
</TrustFrameworkPolicy>

注意

他の種類のユーザー フローを実装するとき (サインイン、パスワード リセット、プロファイル編集など)、このプロセスは基本的にこのセクションで説明するものと同じになります。When implementing other types of user flows (for example sign-in, password reset, or profile editing), the process is essentially the same as described in this section. 上記の手順 4 では、ユーザー体験の最後の手順を JWTIssuer から Saml2AssertionIssuer に変更します。In step 4 above, you'll change the last step of the user journey from JWTIssuer to Saml2AssertionIssuer. また、上記の手順 6 では、[証明書利用者] セクションで、プロトコルOpenIdConnect から SAML2 に変更します。And in step 6 above, in the relying party section, you'll change the Protocol from OpenIdConnect to SAML2.

3.2 ポリシー メタデータをアップロードしてテストする3.2 Upload and test your policy metadata

変更を保存し、新しいポリシー ファイルをアップロードします。Save your changes and upload the new policy file. 両方のポリシー (拡張機能ファイルと証明書利用者ファイル) をアップロードした後、Web ブラウザーを開き、ポリシー メタデータに移動します。After you've uploaded both policies (the extension and the relying party files), open a web browser and navigate to the policy metadata.

Azure AD B2C ポリシー IDP メタデータは、SAML ID プロバイダーの構成を公開するために SAML プロトコルで使用される情報です。Azure AD B2C policy IDP metadata is information used in the SAML protocol to expose the configuration of a SAML identity provider. メタデータは、サインインとサインアウト、証明書、サインイン方法など、サービスの場所を定義します。Metadata defines the location of the services, such as sign-in and sign-out, certificates, sign-in method, and more. Azure AD B2C ポリシーのメタデータは、次の URL から入手できます。The Azure AD B2C policy metadata is available at the following URL. tenant-name を Azure AD B2C テナントの名前に置き換え、policy-name にポリシーの名前 (ID) を付けます。たとえば、.../B2C_1A_signup_signin_saml/samlp/metadata のようにします。Replace tenant-name with the name of your Azure AD B2C tenant, and policy-name with the name (ID) of the policy for example, .../B2C_1A_signup_signin_saml/samlp/metadata:

https://tenant-name.b2clogin.com/tenant-name.onmicrosoft.com/policy-name/Samlp/metadata

これで、カスタム ポリシーと Azure AD B2C テナントの準備ができました。Your custom policy and Azure AD B2C tenant are now ready. 次に、Azure AD B2C でアプリケーション登録を作成します。Next, create an application registration in Azure AD B2C.

4.Azure AD B2C ディレクトリでアプリケーションをセットアップする4. Setup application in the Azure AD B2C Directory

4.1 Azure AD B2C にアプリケーションを登録する4.1 Register your application in Azure AD B2C

  1. Azure portal にサインインします。Sign in to the Azure portal.
  2. 上部のメニューにある [ディレクトリ + サブスクリプション] フィルターを選択し、Azure AD B2C テナントを含むディレクトリを選択します。Select the Directory + subscription filter in the top menu, and then select the directory that contains your Azure AD B2C tenant.
  3. 左側のメニューで、 [Azure AD B2C] を選択します。In the left menu, select Azure AD B2C. または、 [すべてのサービス] を選択し、 [Azure AD B2C] を検索して選択します。Or, select All services and search for and select Azure AD B2C.
  4. [アプリの登録] を選択し、 [新規登録] を選択します。Select App registrations, and then select New registration.
  5. アプリケーションの 名前 を入力します。Enter a Name for the application. たとえば、SAMLApp1 です。For example, SAMLApp1.
  6. [サポートされているアカウントの種類] で、 [この組織のディレクトリ内のアカウントのみ] を選択します。Under Supported account types, select Accounts in this organizational directory only
  7. [リダイレクト URI][Web] を選択し、「https://localhost」と入力します。Under Redirect URI, select Web, and then enter https://localhost. この値は、後でアプリケーションの登録のマニフェストで変更します。You modify this value later in the application registration's manifest.
  8. [登録] を選択します。Select Register.

4.2 アプリ マニフェストを更新する4.2 Update the app manifest

SAML アプリの場合、アプリケーションの登録のマニフェストで構成する必要があるいくつかのプロパティがあります。For SAML apps, there are several properties you need to configure in the application registration's manifest.

  1. Azure portal で、前のセクションで作成したアプリケーションの登録に移動します。In the Azure portal, navigate to the application registration that you created in the previous section.
  2. [管理] で、 [マニフェスト] を選択してマニフェスト エディターを開きます。Under Manage, select Manifest to open the manifest editor. 次のセクションで、いくつかのプロパティを変更します。You modify several properties in the following sections.

identifierUrisidentifierUris

identifierUris は、Azure AD B2C テナント内の Web アプリを一意に識別するユーザー定義 URI が含まれる文字列コレクションです。The identifierUris is a string collection containing user-defined URI(s) that uniquely identify a Web app within its Azure AD B2C tenant. URI は、SAML 要求の Issuer の名前と一致している必要があります。The URI must match the SAML request's Issuer name. ユーザー定義 URI は、通常、サービス プロバイダーのメタデータ entityID と同じ値です。The user-defined URI is typically the same value as the service provider metadata entityID.

samlMetadataUrlsamlMetadataUrl

このプロパティは、サービス プロバイダーの公開されているメタデータ URL を表します。This property represents service provider's publicly available metadata URL. このメタデータ URL により、匿名でアクセスできる任意のエンドポイント (BLOB ストレージなど) にアップロードされたメタデータ ファイルを指すことができます。The metadata URL can point to a metadata file uploaded to any anonymously accessible endpoint, for example blob storage.

メタデータは、サービス プロバイダーなど、SAML パーティーの構成を公開するために SAML プロトコルで使用される情報です。The metadata is information used in the SAML protocol to expose the configuration of a SAML party, such as a service provider. メタデータで、サインインとサインアウト、証明書、サインイン方法などのサービスの場所を定義します。Metadata defines the location of the services like sign-in and sign-out, certificates, sign-in method, and more. Azure AD B2C は、サービス プロバイダーのメタデータを読み取り、それに応じて動作します。Azure AD B2C reads the service provider metadata and acts accordingly. メタデータは必須ではありません。The metadata is not required. アプリ マニフェストで直接、応答 URI やログアウト URI などの一部の属性を指定することもできます。You can also specify some of attributes like the reply URI and logout URI directly in the app manifest.

SAML メタデータ URL とアプリケーションの登録のマニフェストの "両方" に指定されたプロパティがある場合は、マージ されます。If there are properties specified in both the SAML metadata URL and in the application registration's manifest, they are merged. メタデータ URL に指定されたプロパティが最初に処理され、優先されます。The properties specified in the metadata URL are processed first and take precedence.

SAML テスト アプリケーションを使用するこのチュートリアルでは、samlMetadataUrl に次の値を使用します。For this tutorial, which uses the SAML test application, use the following value for samlMetadataUrl:

"samlMetadataUrl":"https://samltestapp2.azurewebsites.net/Metadata",

replyUrlsWithType (省略可能)replyUrlsWithType (Optional)

メタデータ URI を設定しない場合は、応答 URL を明示的に指定できます。If you do not provide a metadata URI, you can explicitly specify the reply URL. この省略可能なプロパティは AssertionConsumerServiceUrl (サービス プロバイダーのメタデータ内の SingleSignOnService URL) を表し、BindingTypeHTTP POST であると見なされます。This optional property represents the AssertionConsumerServiceUrl (SingleSignOnService URL in the service provider metadata) and the BindingType is assumed to be HTTP POST.

サービス プロバイダーのメタデータを使用せずにアプリケーション マニフェストで応答 URL とログアウト URL を構成することを選択した場合、Azure AD B2C では、SAML 要求署名は検証されず、SAML 応答も暗号化されません。If you choose to configure the reply URL and logout URL in the application manifest without using the service provider metadata, Azure AD B2C will not validate the SAML request signature, nor encrypt the SAML response.

このチュートリアルでは、SAML テスト アプリケーションを使用して、replyUrlsWithTypeurl プロパティを次の JSON スニペット内で示される値に設定します。For this tutorial, in which you use the SAML test application, set the url property of replyUrlsWithType to the value shown in the following JSON snippet.

"replyUrlsWithType":[
  {
    "url":"https://samltestapp2.azurewebsites.net/SP/AssertionConsumer",
    "type":"Web"
  }
],

logoutUrl (省略可能)logoutUrl (Optional)

この省略可能なプロパティは Logout URL (証明書利用者のメタデータ内の SingleLogoutService URL) を表し、この BindingTypeHttp-Redirect であると見なされます。This optional property represents the Logout URL (SingleLogoutService URL in the relying party metadata), and the BindingType for this is assumed to be Http-Redirect.

SAML テスト アプリケーションを使用するこのチュートリアルでは、logoutUrlhttps://samltestapp2.azurewebsites.net/logout に設定したままにします。For this tutorial, which uses the SAML test application, leave logoutUrl set to https://samltestapp2.azurewebsites.net/logout:

"logoutUrl": "https://samltestapp2.azurewebsites.net/logout",

5.アプリケーション コードを更新する5. Update your application code

最後の手順では、SAML 証明書利用者アプリケーションで Azure AD B2C を SAML IdP として有効にします。The last step is to enable Azure AD B2C as a SAML IdP in your SAML relying party application. アプリケーションはそれぞれ異なり、そのための手順もさまざまです。Each application is different and the steps to do so vary. 詳細については、アプリのドキュメントを参照してください。Consult your app's documentation for details.

メタデータは、ご利用のサービス プロバイダーで "静的メタデータ" または "動的メタデータ" として構成されている可能性があります。The metadata can be configured in your service provider as "Static Metadata" or "Dynamic Metadata". 静的モードでは、メタデータのすべてまたは一部を Azure AD B2C ポリシー メタデータからコピーします。In static mode, you copy all or part of the metadata from the Azure AD B2C policy metadata. 動的モードでは、URL をメタデータに設定し、アプリケーションでメタデータを動的に読み取ります。In dynamic mode, you set the URL to the metadata and let our application read the metadata dynamically.

通常、次の一部またはすべてが必要です。Some or all the following are typically required:

  • メタデータ: https://tenant-name.b2clogin.com/tenant-name.onmicrosoft.com/policy-name/Samlp/metadataMetadata: https://tenant-name.b2clogin.com/tenant-name.onmicrosoft.com/policy-name/Samlp/metadata

  • 発行者:SAML 要求の issuer 値は、アプリケーション登録マニフェストの identifierUris 要素で構成された URI のいずれかと一致する必要があります。Issuer: The SAML request issuer value must match one of the URIs configured in the identifierUris element of the application registration manifest. SAML 要求の issuer の名前が identifierUris 要素に存在しない場合は、アプリケーション登録マニフェストに追加しますIf the SAML request issuer name doesn't exist in the identifierUris element, add it to the application registration manifest. たとえば、https://contoso.onmicrosoft.com/app-name のようにします。For example, https://contoso.onmicrosoft.com/app-name.

  • ログイン Url/SAML エンドポイント/SAML Url:Azure AD B2C SAML ポリシー メタデータ ファイルの <SingleSignOnService> XML 要素の値を確認しますLogin Url/SAML endpoint/SAML Url: Check the value in the Azure AD B2C SAML policy metadata file for the <SingleSignOnService> XML element

  • Certificate: これは B2C_1A_SamlIdpCert ですが、秘密キーはありません。Certificate: This is B2C_1A_SamlIdpCert, but without the private key. 証明書の公開キーを取得するには、次のようにします。To get the public key of the certificate:

    1. 上で指定したメタデータ URL にアクセスします。Go to the metadata URL specified above.
    2. <X509Certificate> 要素の値をコピーします。Copy the value in the <X509Certificate> element.
    3. テキスト ファイルに貼り付けます。Paste it into a text file.
    4. テキスト ファイルを .cer ファイルとして保存します。Save the text file as a .cer file.

5.1 SAML テスト アプリでテストする (省略可能)5.1 Test with the SAML Test App (optional)

SAML テスト アプリケーションを使用してこのチュートリアルを完了するには、次のようにします。To complete this tutorial using our SAML Test Application:

  • テナント名を更新しますUpdate the tenant name
  • ポリシー名を更新します (例 B2C_1A_signup_signin_saml)Update policy name, for example B2C_1A_signup_signin_saml
  • 発行者 URI を指定します。Specify this issuer URI. アプリケーション登録マニフェストの identifierUris 要素にある URI のいずれか (たとえば https://contoso.onmicrosoft.com/app-name) を使用します。Use one of the URIs found in the identifierUris element in the application registration manifest, for example https://contoso.onmicrosoft.com/app-name.

[ログイン] を選択すると、ユーザーのサインイン画面が表示されます。Select Login and you should be presented with a user sign-in screen. サインインすると、サンプル アプリケーションに SAML アサーションが発行されます。Upon sign-in, a SAML assertion is issued back to the sample application.

暗号化されたアサーションを有効にする (省略可能)Enable Encrypted Assertions (Optional)

サービス プロバイダーに送り返された SAML アサーションを暗号化するために、Azure AD B2C ではサービス プロバイダーの公開キー証明書が使用されます。To Encrypt SAML Assertions sent back to the Service Provider, Azure AD B2C will use the Service providers public key certificate. 公開キーは、上記の「samlMetadataUrl」で説明した SAML メタデータに、'Encryption' の用途の KeyDescriptor として含まれている必要があります。The public key must exist in the SAML Metadata outlined in the above "samlMetadataUrl" as a KeyDescriptor with a use of 'Encryption'.

次の XML コードは、"use" を "Encryption" に設定した SAML メタデータの KeyDescriptor の例です。The following XML code is an example of the SAML metadata KeyDescriptor with a use set to Encryption:

<KeyDescriptor use="encryption">
  <KeyInfo xmlns="https://www.w3.org/2000/09/xmldsig#">
    <X509Data>
      <X509Certificate>valid certificate</X509Certificate>
    </X509Data>
  </KeyInfo>
</KeyDescriptor>

Azure AD B2C が暗号化されたアサーションを送信できるようにするには、次に示すように、証明書利用者の技術プロファイルWantsEncryptedAssertion メタデータ項目を true に設定します。To enable Azure AD B2C to send encrypted assertions, set the WantsEncryptedAssertion metadata item to true in the relying party technical profile. SAML アサーションの暗号化に使用されるアルゴリズムも構成できます。You can also configure the algorithm used to encrypt the SAML assertion. 詳細については、証明書利用者の技術プロファイルのメタデータを参照してください。For more information, see relying party technical profile metadata.

<RelyingParty>
  <DefaultUserJourney ReferenceId="SignUpOrSignIn" />
  <TechnicalProfile Id="PolicyProfile">
    <DisplayName>PolicyProfile</DisplayName>
    <Protocol Name="SAML2"/>
    <Metadata>
      <Item Key="WantsEncryptedAssertions">true</Item>
    </Metadata>
   ..
  </TechnicalProfile>
</RelyingParty>

ID プロバイダー開始フローを有効にする (省略可能)Enable identity provider initiated flow (Optional)

ID プロバイダー開始フローでは、サインイン プロセスは ID プロバイダー (Azure AD B2C) によって開始され、このプロバイダーによって、要請されていない SAML 応答がサービス プロバイダー (証明書利用者アプリケーション) に送信されます。In identity provider initiated flow, the sign-in process is initiated by the identity provider (Azure AD B2C), which sends an unsolicited SAML response to the service provider (your relying party application). 現在、開始側の ID プロバイダーが外部 ID プロバイダー (たとえば AD-FSSalesforce) であるシナリオはサポートされていません。We don't currently support scenarios where the initiating identity provider is an external identity provider, for example AD-FS, or Salesforce.

ID プロバイダー (Azure AD B2C) 開始フローを有効にするには、証明書利用者の技術プロファイルで、IdpInitiatedProfileEnabled メタデータ項目を true に設定します。To enable identity provider (Azure AD B2C) initiated flow, set the IdpInitiatedProfileEnabled metadata item to true in the relying party technical profile.

<RelyingParty>
  <DefaultUserJourney ReferenceId="SignUpOrSignIn" />
  <TechnicalProfile Id="PolicyProfile">
    <DisplayName>PolicyProfile</DisplayName>
    <Protocol Name="SAML2"/>
    <Metadata>
      <Item Key="IdpInitiatedProfileEnabled">true</Item>
    </Metadata>
   ..
  </TechnicalProfile>
</RelyingParty>

ID プロバイダー開始フローを通じてユーザーをサインインまたはサインアップするには、次の URL を使用します。To sign in or sign up a user through identity provider initiated flow, use the following URL:

https://tenant-name.b2clogin.com/tenant-name.onmicrosoft.com/policy-name/generic/login?EntityId=app-identifier-uri 

次の値を置き換えます。Replace the following values:

  • tenant-name を実際のテナント名に置き換えますtenant-name with your tenant name
  • policy-name を SAML 証明書利用者のポリシー名に置き換えますpolicy-name with your SAML relying party policy name
  • app-identifier-uri をメタデータ ファイルの identifierUris (https://contoso.onmicrosoft.com/app-name など) にapp-identifier-uri with the identifierUris in the metadata file, such as https://contoso.onmicrosoft.com/app-name

サンプル ポリシーSample policy

SAML テスト アプリでテストに使用できる完全なサンプル ポリシーが用意されています。We provide a complete sample policy that you can use for testing with the SAML Test App.

  1. SAML SP によって開始されるログインのサンプル ポリシーをダウンロードしますDownload the SAML-SP-initiated login sample policy
  2. TenantId をテナント名に一致するように更新します (例 contoso.b2clogin.com)Update TenantId to match your tenant name, for example contoso.b2clogin.com
  3. B2C_1A_signup_signin_saml のポリシー名をそのままにしますKeep the policy name of B2C_1A_signup_signin_saml

サポートされている SAML モダリティとサポートされていない SAML モダリティSupported and unsupported SAML modalities

次の SAML 証明書利用者 (RP) シナリオは、独自のメタデータ エンドポイント経由でサポートされます。The following SAML relying party (RP) scenarios are supported via your own metadata endpoint:

  • アプリケーションまたはサービス プリンシパル オブジェクト内のログアウト URL に対する複数のログアウト URL または POST バインド。Multiple logout URLs or POST binding for logout URL in application/service principal object.
  • アプリケーションまたはサービス プリンシパル オブジェクト内に RP 要求を検証するための署名キーを指定します。Specify signing key to verify RP requests in application/service principal object.
  • アプリケーションまたはサービス プリンシパル オブジェクト内にトークン暗号化キーを指定します。Specify token encryption key in application/service principal object.
  • ID プロバイダーがサインオンを開始しました。この場合、ID プロバイダーは Azure AD B2C です。Identity Provider initiated sign on, where the Identity Provider is Azure AD B2C.

SAML トークンSAML token

SAML トークンは、サインインが成功した後に Azure AD B2C によって発行されるセキュリティ トークンです。A SAML token is a security token that is issued by Azure AD B2C after a successful sign-in. これには、ユーザー、トークンの対象となるサービス プロバイダー、署名、有効期間に関する情報が含まれます。It contains information about the user, the service provider for which the token is intended, signature, and validity time. 次の表は、Azure AD B2C によって発行される SAML トークンで予期できる要求とプロパティの一覧です。The following table lists the claims and properties that you can expect in a SAML token issued by Azure AD B2C.

要素Element プロパティProperty NotesNotes
<Response> ID 応答の自動生成一意識別子。An auto-generated unique identifier of the response.
<Response> InResponseTo このメッセージの応答先となる SAML 要求の ID。The ID of the SAML request that this message is in response to.
<Response> IssueInstant 応答の発行の瞬間。The time instant of issue of the response. 時刻値は UTC でエンコードされます。The time value is encoded in UTC. トークンの有効期間の設定を変更するには、SAML トークン発行者の技術プロファイルの TokenNotBeforeSkewInSeconds メタデータを設定します。To change the settings on your token lifetimes, set the TokenNotBeforeSkewInSeconds metadata of the SAML token issuer technical profile.
<Response> Destination この応答の送信先のアドレスを示す URI 参照。A URI reference indicating the address to which this response has been sent. 値は、SAML 要求 AssertionConsumerServiceURL と同じです。The value is identical to the SAML request AssertionConsumerServiceURL.
<Response> <Issuer><Response> <Issuer> トークン発行者を識別します。Identifies the token issuer. これは、SAML トークン発行者の IssuerUri メタデータによって定義される任意の URI ですThis is an arbitrary URI defined by the SAML token issue's IssuerUri metadata
<Response> <Assertion> <Subject> <NameID><Response> <Assertion> <Subject> <NameID> トークンによって情報がアサートされるプリンシパルです (ユーザー オブジェクト ID など)。The principal about which the token asserts information, such as the user object ID. この値は変更不可で、再割り当ても再利用もできません。This value is immutable and cannot be reassigned or reused. そのため、この値を使用すると、トークンを使用してリソースにアクセスする場合などに安全に承認チェックができます。It can be used to perform authorization checks safely, such as when the token is used to access a resource. 既定では、サブジェクト要求には、ディレクトリ内のユーザーのオブジェクト ID が設定されます。By default, the subject claim is populated with the object ID of the user in the directory.
<Response> <Assertion> <Subject> <NameID><Response> <Assertion> <Subject> <NameID> Format 文字列ベースの識別子情報の分類を表す URI 参照。A URI reference representing the classification of string-based identifier information. 既定では、このプロパティは省略されます。By default this property is omitted. 証明書利用者 SubjectNamingInfo を設定して、urn:oasis:names:tc:SAML:2.0:nameid-format:transient などの NameID 形式を指定できます。You can set the relying party SubjectNamingInfo to specify the NameID format, such as urn:oasis:names:tc:SAML:2.0:nameid-format:transient.
<Response> <Assertion> <Subject> <Conditions><Response> <Assertion> <Subject> <Conditions> NotBefore トークンが有効になる時刻。The time at which the token becomes valid. 時刻値は UTC でエンコードされます。The time value is encoded in UTC. アプリケーションでは、この要求を使用してトークンの有効期間の有効性を確認する必要があります。Your application should use this claim to verify the validity of the token lifetime. トークンの有効期間の設定を変更するには、SAML トークン発行の技術プロファイルの TokenNotBeforeSkewInSeconds メタデータを設定します。To change the settings on your token lifetimes, set the TokenNotBeforeSkewInSeconds metadata of the SAML token issue technical profile.
<Response> <Assertion> <Subject> <Conditions><Response> <Assertion> <Subject> <Conditions> NotOnOrAfter トークンが無効になる時刻。The time at which the token becomes invalid. アプリケーションでは、この要求を使用してトークンの有効期間の有効性を確認する必要があります。Your application should use this claim to verify the validity of the token lifetime. この値は NotBefore の 15 分後であり、変更することはできません。The value is 15 minutes after the NotBefore and cannot be changed.
<Response> <Assertion> <Conditions> <AudienceRestriction> <Audience><Response> <Assertion> <Conditions> <AudienceRestriction> <Audience> 対象ユーザーを識別する URI 参照。A URI reference that identifies an intended audience. トークンの受信者を示します。It identifies the intended recipient of the token. 値は、SAML 要求 AssertionConsumerServiceURL と同じです。The value is identical to the SAML request AssertionConsumerServiceURL.
<Response> <Assertion> <AttributeStatement> <Attribute> の コレクション<Response> <Assertion> <AttributeStatement> collection of <Attribute> 証明書利用者の技術プロファイル出力要求で構成されているアサーション コレクション (要求)。Assertions collection (claims), as configured in the relying party technical profile output claims. 出力要求の PartnerClaimType を設定することにより、アサーションの名前を構成できます。You can configure the name of the assertion by setting the PartnerClaimType of the output claim.

次のステップNext steps