共用方式為


在 Azure AD B2C 中註冊 SAML 應用程式的選項

本文說明當您將 Azure Active Directory B2C (Azure AD B2C) 與安全性判斷提示標記語言 (SAML) 應用程式連線時可用的組態選項。

開始 之前,請使用 [選擇原則類型 選取器] 來選擇您要設定的原則類型。 Azure Active Directory B2C 提供兩種方法來定義使用者如何與您的應用程式互動:透過預先 定義的使用者流程 ,或透過完全可設定 的自訂原則 。 本文中每個方法所需的步驟都不同。

此功能僅適用于自訂原則。 針對安裝步驟,請在上述選取器中選取 [自訂原則 ]。

指定 SAML 回應簽章

您可以指定要用來簽署 SAML 訊息的憑證。 訊息是 <samlp:Response> 傳送至應用程式之 SAML 回應內的 元素。

如果您還沒有原則金鑰,請 建立一個 。 然後在 SAML 權杖簽發者技術設定檔中設定 SamlMessageSigning 中繼資料專案。 StorageReferenceId 必須參考原則金鑰名稱。

<ClaimsProvider>
  <DisplayName>Token Issuer</DisplayName>
  <TechnicalProfiles>
    <!-- SAML Token Issuer technical profile -->
    <TechnicalProfile Id="Saml2AssertionIssuer">
      <DisplayName>Token Issuer</DisplayName>
      <Protocol Name="SAML2"/>
      <OutputTokenFormat>SAML2</OutputTokenFormat>
        ...
      <CryptographicKeys>
        <Key Id="SamlMessageSigning" StorageReferenceId="B2C_1A_SamlMessageCert"/>
        ...
      </CryptographicKeys>
    ...
    </TechnicalProfile>

簽章演算法

您可以設定用來簽署 SAML 判斷提示的簽章演算法。 可能的值為 Sha256Sha384Sha512Sha1 。 請確定技術設定檔和應用程式使用相同的簽章演算法。 只使用憑證支援的演算法。

使用 XmlSignatureAlgorithm 信賴憑證者 Metadata 元素內的中繼資料金鑰來設定簽章演算法。

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

檢查 SAML 判斷提示簽章

當您的應用程式預期要簽署 SAML 判斷提示區段時,請確定 SAML 服務提供者將 設定 WantAssertionsSignedtrue 。 如果設定為 false 或不存在,則不會簽署判斷提示區段。

下列範例顯示 SAML 服務提供者的中繼資料,並將 WantAssertionsSigned 設定為 true

<EntityDescriptor ID="id123456789" entityID="https://samltestapp2.azurewebsites.net" validUntil="2099-12-31T23:59:59Z" xmlns="urn:oasis:names:tc:SAML:2.0:metadata">
  <SPSSODescriptor WantAssertionsSigned="true" AuthnRequestsSigned="false" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
  ...
  </SPSSODescriptor>
</EntityDescriptor>

簽章憑證

您的原則必須指定要用來簽署 SAML 回應之 SAML 判斷提示區段的憑證。 如果您還沒有原則金鑰,請 建立一個 。 然後在 SAML 權杖簽發者技術設定檔中設定 SamlAssertionSigning 中繼資料專案。 StorageReferenceId 必須參考原則金鑰名稱。

<ClaimsProvider>
  <DisplayName>Token Issuer</DisplayName>
  <TechnicalProfiles>
    <!-- SAML Token Issuer technical profile -->
    <TechnicalProfile Id="Saml2AssertionIssuer">
      <DisplayName>Token Issuer</DisplayName>
      <Protocol Name="SAML2"/>
      <OutputTokenFormat>SAML2</OutputTokenFormat>
        ...
      <CryptographicKeys>
        <Key Id="SamlAssertionSigning" StorageReferenceId="B2C_1A_SamlMessageCert"/>
        ...
      </CryptographicKeys>
    ...
    </TechnicalProfile>

在 SAML 判斷提示中啟用加密

當應用程式預期 SAML 判斷提示為加密格式時,請確定已在 Azure AD B2C 原則中啟用加密。

Azure AD B2C 會使用服務提供者的公開金鑰憑證來加密 SAML 判斷提示。 公開金鑰必須存在於 SAML 應用程式的中繼資料端點 KeyDescriptoruse 中,且值設定為 Encryption ,如下列範例所示:

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

若要讓 Azure AD B2C 傳送加密判斷提示,請將信賴憑證者技術設定檔中的中繼資料專案設定 WantsEncryptedAssertiontrue 您也可以設定用來加密 SAML 判斷提示的演算法。

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

加密方法

若要設定用來加密 SAML 判斷提示資料的加密方法,請在信賴憑證者內設定 DataEncryptionMethod 中繼資料金鑰。 可能的值為 Aes256 (預設值)、、 Aes192Sha512 、 或 Aes128 。 中繼資料會控制 SAML 回應中的專案值 <EncryptedData>

若要設定加密方法,以加密用來加密 SAML 判斷提示資料的金鑰複本,請在信賴憑證者內設定 KeyEncryptionMethod 中繼資料金鑰。 可能的值包括:

  • Rsa15 (預設值):RSA 公開金鑰密碼編譯標準 (PKCS) 1.5 版演算法。
  • RsaOaep:RSA 最佳非對稱加密填補 (OAEP) 加密演算法。

中繼資料會控制 SAML 回應中的專案值 <EncryptedKey>

下列範例顯示 EncryptedAssertion SAML 判斷提示的 區段。 加密的資料方法是 Aes128 ,而加密金鑰方法是 Rsa15

<saml:EncryptedAssertion>
  <xenc:EncryptedData xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"
    xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" Type="http://www.w3.org/2001/04/xmlenc#Element">
    <xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes128-cbc" />
    <dsig:KeyInfo>
      <xenc:EncryptedKey>
        <xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />
        <xenc:CipherData>
          <xenc:CipherValue>...</xenc:CipherValue>
        </xenc:CipherData>
      </xenc:EncryptedKey>
    </dsig:KeyInfo>
    <xenc:CipherData>
      <xenc:CipherValue>...</xenc:CipherValue>
    </xenc:CipherData>
  </xenc:EncryptedData>
</saml:EncryptedAssertion>

您可以變更加密判斷提示的格式。 若要設定加密格式,請在信賴憑證者內設定 UseDetachedKeys 中繼資料金鑰。 可能的值: truefalse (預設值)。 當值設定為 true 時,卸離金鑰會將加密判斷提示新增為 的子 EncryptedAssertion 系,而不是 EncryptedData

使用信賴憑證者技術設定檔 內的 中繼資料金鑰來設定加密方法和格式:

<RelyingParty>
  <DefaultUserJourney ReferenceId="SignUpOrSignIn" />
  <TechnicalProfile Id="PolicyProfile">
    <DisplayName>PolicyProfile</DisplayName>
    <Protocol Name="SAML2"/>
    <Metadata>
      <Item Key="DataEncryptionMethod">Aes128</Item>
      <Item Key="KeyEncryptionMethod">Rsa15</Item>
      <Item Key="UseDetachedKeys">false</Item>
    </Metadata>
   ..
  </TechnicalProfile>
</RelyingParty>

設定 IdP 起始的流程

當應用程式預期收到 SAML 判斷提示而不先將 SAML AuthN 要求傳送至識別提供者 (IdP)時,您必須為 IdP 起始的流程設定 Azure AD B2C。

在 IdP 起始的流程中,識別提供者 (Azure AD B2C) 會啟動登入程式。 識別提供者會將未經請求的 SAML 回應傳送給服務提供者(您的信賴憑證者應用程式)。

我們目前不支援起始識別提供者是與 Azure AD B2C 同盟的外部識別提供者,例如 Active Directory 同盟服務 Salesforce 的案例。 只有 Azure AD B2C 中的本機帳戶驗證才支援 IdP 起始的流程。

若要啟用 IdP 起始的流程,請將 IdpInitiatedProfileEnabled 信賴憑證者技術設定檔 中的中繼資料專案設定為 true

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

若要透過 IdP 起始的流程登入或註冊使用者,請使用下列 URL:

https://<tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/<policy-name>/generic/login?EntityId=<app-identifier-uri>&RelayState=<relay-state> 

取代下列值:

  • 將 取代 <tenant-name> 為您的租使用者名稱。
  • 將 取代 <policy-name> 為 SAML 信賴憑證者原則的名稱。
  • 將 取代 <app-identifier-uri>identifierUris 中繼資料檔案中的 值,例如 https://contoso.onmicrosoft.com/app-name
  • [選擇性] 將 取代 <relay-state> 為授權要求中包含的值,此值也會在權杖回應中傳回。 relay-state參數可用來在驗證要求發生之前,在應用程式中編碼使用者狀態的相關資訊,例如他們開啟的頁面。

範例原則

您可以使用完整的範例原則來測試 SAML 測試應用程式:

  1. 下載 SAML-SP 起始的登入範例原則
  2. 更新 TenantId 以符合您的租使用者名稱。 本文使用 範例 contoso.b2clogin.com
  3. 保留原則名稱 B2C_1A_signup_signin_saml

設定 SAML 回應存留期

您可以設定 SAML 回應維持有效的時間長度。 使用 TokenLifeTimeInSeconds SAML 權杖簽發者技術設定檔內的中繼資料專案來設定存留期。 此值是從時間戳記中經過 NotBefore 的秒數,在權杖發行時間計算。 預設存留期為 300 秒(五分鐘)。

<ClaimsProvider>
  <DisplayName>Token Issuer</DisplayName>
  <TechnicalProfiles>
    <TechnicalProfile Id="Saml2AssertionIssuer">
      <DisplayName>Token Issuer</DisplayName>
      <Protocol Name="SAML2"/>
      <OutputTokenFormat>SAML2</OutputTokenFormat>
      <Metadata>
        <Item Key="TokenLifeTimeInSeconds">400</Item>
      </Metadata>
      ...
    </TechnicalProfile>

設定 SAML 回應的時間扭曲

您可以設定套用至 SAML 回應 NotBefore 時間戳記的時間扭曲。 此設定可確保如果兩個平臺之間的時間未同步,SAML 判斷提示在這段時間扭曲時仍會被視為有效。

使用 TokenNotBeforeSkewInSeconds SAML 權杖簽發者技術設定檔內的中繼資料專案來設定時間扭曲。 扭曲值是以秒為單位,預設值為 0。 最大值為 3600 (一小時)。

例如,當 設定為 120 秒: TokenNotBeforeSkewInSeconds

  • 權杖會在 UTC 13:05:10 發出。
  • 權杖的有效時間是從 13:03:10 UTC。
<ClaimsProvider>
  <DisplayName>Token Issuer</DisplayName>
  <TechnicalProfiles>
    <TechnicalProfile Id="Saml2AssertionIssuer">
      <DisplayName>Token Issuer</DisplayName>
      <Protocol Name="SAML2"/>
      <OutputTokenFormat>SAML2</OutputTokenFormat>
      <Metadata>
        <Item Key="TokenNotBeforeSkewInSeconds">120</Item>
      </Metadata>
      ...
    </TechnicalProfile>

從日期和時間移除毫秒

您可以指定是否要從 SAML 回應內的日期和時間值中移除毫秒。 (這些值包括 IssueInstantNotBeforeNotOnOrAfterAuthnInstant 。若要移除毫秒,請在信賴憑證者內設定 RemoveMillisecondsFromDateTime 中繼資料金鑰。 可能的值: false (預設值)或 true

  <RelyingParty>
    <DefaultUserJourney ReferenceId="SignUpOrSignIn" />
    <TechnicalProfile Id="PolicyProfile">
      <DisplayName>PolicyProfile</DisplayName>
      <Protocol Name="SAML2" />
      <Metadata>
        <Item Key="RemoveMillisecondsFromDateTime">true</Item>
      </Metadata>
      <OutputClaims>
             ...
      </OutputClaims>
      <SubjectNamingInfo ClaimType="objectId" ExcludeAsClaim="true" />
    </TechnicalProfile>
  </RelyingParty>

使用簽發者識別碼覆寫簽發者 URI

如果您有多個相依于不同 entityID 值的 SAML 應用程式,則可以覆寫 IssuerUri 信賴憑證者檔案中的值。 若要覆寫簽發者 URI,請從基底檔案複製識別碼的技術 Saml2AssertionIssuer 設定檔,並覆寫 IssuerUri 值。

提示

從基底複製 區 <ClaimsProviders> 段,並在宣告提供者內保留這些專案: <DisplayName>Token Issuer</DisplayName><TechnicalProfile Id="Saml2AssertionIssuer"><DisplayName>Token Issuer</DisplayName>

範例:

   <ClaimsProviders>   
    <ClaimsProvider>
      <DisplayName>Token Issuer</DisplayName>
      <TechnicalProfiles>
        <TechnicalProfile Id="Saml2AssertionIssuer">
          <DisplayName>Token Issuer</DisplayName>
          <Metadata>
            <Item Key="IssuerUri">customURI</Item>
          </Metadata>
        </TechnicalProfile>
      </TechnicalProfiles>
    </ClaimsProvider>
  </ClaimsProviders>
  <RelyingParty>
    <DefaultUserJourney ReferenceId="SignUpInSAML" />
    <TechnicalProfile Id="PolicyProfile">
      <DisplayName>PolicyProfile</DisplayName>
      <Protocol Name="SAML2" />
      <Metadata>
     …

管理會話

您可以使用 元素和 SamlSSOSessionProvider 來管理 Azure AD B2C 與 SAML 信賴憑證者應用程式 UseTechnicalProfileForSessionManagement 之間的會話。

強制使用者重新驗證

若要強制使用者重新驗證,應用程式可以在 ForceAuthn SAML 驗證要求中包含 屬性。 屬性 ForceAuthn 是布林值。 當它設定為 true 時,使用者的會話將會在 Azure AD B2C 失效,且使用者被迫重新驗證。

下列 SAML 驗證要求示範如何將 屬性設定 ForceAuthntrue

<samlp:AuthnRequest 
       Destination="https://contoso.b2clogin.com/contoso.onmicrosoft.com/B2C_1A_SAML2_signup_signin/samlp/sso/login"
       ForceAuthn="true" ...>
    ...
</samlp:AuthnRequest>

簽署 Azure AD B2C IdP SAML 中繼資料

如果應用程式需要,您可以指示 Azure AD B2C 簽署其 SAML 識別提供者的元資料檔案。 如果您還沒有原則金鑰,請 建立一個 。 然後在 SAML 權杖簽發者技術設定檔中設定 MetadataSigning 中繼資料專案。 StorageReferenceId 必須參考原則金鑰名稱。

<ClaimsProvider>
  <DisplayName>Token Issuer</DisplayName>
  <TechnicalProfiles>
    <!-- SAML Token Issuer technical profile -->
    <TechnicalProfile Id="Saml2AssertionIssuer">
      <DisplayName>Token Issuer</DisplayName>
      <Protocol Name="SAML2"/>
      <OutputTokenFormat>SAML2</OutputTokenFormat>
        ...
      <CryptographicKeys>
        <Key Id="MetadataSigning" StorageReferenceId="B2C_1A_SamlMetadataCert"/>
        ...
      </CryptographicKeys>
    ...
    </TechnicalProfile>

對 SAML 通訊協定進行偵錯

若要協助設定及偵錯與服務提供者的整合,您可以使用 SAML 通訊協定的瀏覽器擴充功能。 瀏覽器延伸模組包括適用于 Chrome 的 SAML DevTools 擴充功能、 適用于 Firefox 的 SAML 追蹤器,以及 適用于 Edge 或 Internet Explorer 的 開發人員工具。

使用這些工具,您可以檢查應用程式與 Azure AD B2C 之間的整合。 例如:

  • 檢查 SAML 要求是否包含簽章,並判斷用來登入授權要求的演算法。
  • 檢查 Azure AD B2C 是否傳回錯誤訊息。
  • 檢查判斷提示區段是否已加密。

下一步