分享方式:


在 Azure Active Directory B2C 中使用自定義原則,將 AD FS 新增為 SAML 識別提供者

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

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

注意

在 Azure Active Directory B2C 中, 自定義原則 的設計主要是為了解決複雜的案例。 在大部分情況下,我們建議您使用內 建的使用者流程。 如果您尚未這麼做,請了解開始使用 Active Directory B2C 中的自定義原則入門套件。

本文說明如何在 Azure Active Directory B2C (Azure AD B2C) 中使用 自定義原則 來啟用 AD FS 使用者帳戶的登入。 您可以藉由將 SAML 識別提供者新增至自訂原則來啟用登入。

必要條件

建立自我簽署憑證

如果您還沒有憑證,您可以使用自我簽署憑證。 自我簽署憑證是一種安全性憑證,不是由證書頒發機構單位 (CA) 簽署,也不會提供 CA 所簽署憑證的安全性保證。

在 Windows 上 ,使用 PowerShell 中的 New-SelfSignedCertificate Cmdlet 來產生憑證。

  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. 在 [憑證 - 目前使用者] 底下,選取 [個人>憑證>] yourappname.yourtenant.onmicrosoft.com。

  4. 選取憑證,然後選取 [動作>所有工作>導出]。

  5. 選取 [下一步>是],導出私鑰>[下一步]。

  6. 接受匯出檔格式的預設值,然後選取 [下一步]。

  7. 啟用 [密碼] 選項,輸入憑證的密碼,然後選取 [ 下一步]。

  8. 若要指定儲存憑證的位置,請選取 [流覽 ] 並流覽至您選擇的目錄。

  9. 在 [ 另存新檔 ] 視窗中,輸入 檔名,然後選取 [ 儲存]。

  10. 選取 [下一步>完成]。

若要讓 Azure AD B2C 接受 .pfx 檔案密碼,密碼必須使用 Windows 證書存儲匯出公用程式中的 TripleDES-SHA1 選項加密,而不是 AES256-SHA256。

建立原則金鑰

您必須將憑證儲存在 Azure AD B2C 租使用者中。

  1. 登入 Azure 入口網站
  2. 如果您有多個租使用者的存取權,請選取頂端功能表中的 [設定] 圖示,以從 [目錄 + 訂用帳戶] 功能表切換至您的 Azure AD B2C 租使用者。
  3. 選擇 Azure 入口網站 左上角的 [所有服務],然後搜尋並選取 [Azure AD B2C]。
  4. 在 [概觀] 頁面上,選取 [ 身分識別體驗架構]。
  5. 選取 [ 原則密鑰 ],然後選取 [ 新增]。
  6. 針對 [ 選項],選擇 Upload
  7. 輸入 原則金鑰的 [名稱 ]。 例如: SAMLSigningCert 。 前置詞 B2C_1A_ 會自動新增至金鑰的名稱。
  8. 瀏覽並選取具有私鑰的憑證 .pfx 檔案。
  9. 按一下 [建立]。

新增宣告提供者

如果您想要讓使用者使用 AD FS 帳戶登入,您必須將帳戶定義為 Azure AD B2C 可以透過端點進行通訊的宣告提供者。 端點提供一組宣告,供 Azure AD B2C 用來驗證特定使用者已驗證。

您可以將 AD FS 帳戶定義為宣告提供者,方法是將它新增至 原則擴充檔案中的 ClaimsProviders 元素。 如需詳細資訊,請參閱 定義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 AD FS account</Description>
          <Protocol Name="SAML2"/>
          <Metadata>
            <Item Key="WantsEncryptedAssertions">false</Item>
            <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="userPrincipalName" />
            <OutputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="given_name"/>
            <OutputClaim ClaimTypeReferenceId="surname" PartnerClaimType="family_name"/>
            <OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="email"/>
            <OutputClaim ClaimTypeReferenceId="displayName" PartnerClaimType="name"/>
            <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>
    
  4. 將 取代your-AD-FS-domain為您的 AD FS 網域名稱,並將 identityProvider 輸出宣告的值取代為您的 DNS(指出網域的任意值)。

  5. 找出 區 <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>
    
  6. 儲存檔案。

新增使用者旅程圖

此時,識別提供者已設定,但尚未在任何登入頁面中提供。 如果您沒有自己的自定義使用者旅程圖,請建立現有範本使用者旅程圖的重複項目,否則請繼續進行下一個步驟。

  1. 從入門套件開啟 TrustFrameworkBase.xml 檔案。
  2. 尋找並複製包含 Id="SignUpOrSignIn"之 UserJourney 元素的整個內容
  3. 開啟 TrustFrameworkExtensions.xml 並尋找 UserJourneys 元素。 如果專案不存在,請新增一個。
  4. 貼上您複製為 UserJourneys 元素子系之 UserJourney 元素整個內容。
  5. 重新命名使用者旅程圖的標識碼。 例如: Id="CustomSignUpSignIn"

將識別提供者新增至使用者旅程圖

現在您已擁有使用者旅程圖,請將新的識別提供者新增至使用者旅程圖。 您必須先新增登入按鈕,然後將按鈕連結至動作。 動作是您稍早建立的技術配置檔。

  1. 尋找在 Type="CombinedSignInAndSignUp"使用者旅程圖中包含 或 Type="ClaimsProviderSelection" 的協調流程步驟元素。 通常是第一個協調流程步驟。 ClaimsProviderSelections 元素包含使用者可以登入的識別提供者清單。 元素的順序會控制向用戶呈現的登入按鈕順序。 新增 ClaimsProviderSelection XML 元素。 將 TargetClaimsExchangeId 的值設定為易記名稱。

  2. 在下一個 協調流程步驟中,新增 ClaimsExchange 元素。 將標識符設定為目標宣告交換標識碼的值。將TechnicalProfileReferenceId的值更新為您稍早建立之技術配置檔的標識碼。

下列 XML 示範使用者旅程圖的前兩個協調流程步驟與識別提供者:

<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元素。 更新 ReferenceId 以符合您新增識別提供者的使用者旅程圖標識碼。

在下列範例中 CustomSignUpSignIn ,針對使用者旅程圖, ReferenceId 會設定為 CustomSignUpSignIn

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

上傳自定義原則

  1. 登入 Azure 入口網站
  2. 在入口網站工具列中選取 [ 目錄 + 訂 用帳戶] 圖示,然後選取包含 Azure AD B2C 租使用者的目錄。
  3. 在 Azure 入口網站中,搜尋並選取 [Azure AD B2C]
  4. 在 [原則] 底下,選取 [身分識別體驗架構]。
  5. 選取 [ 上傳自定義原則],然後上傳您變更的兩個原則檔案,順序如下:擴充原則,例如 TrustFrameworkExtensions.xml,然後是信賴憑證者原則,例如 SignUpSignIn.xml

設定AD FS信賴憑證者信任

若要在 Azure AD B2C 中使用 AD FS 作為識別提供者,您必須使用 Azure AD B2C SAML 元數據建立 AD FS 信賴憑證者信任。 下列範例顯示 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.onmicrosoft.com。
  • 具有自訂功能變數名稱的 your-domain-name ,例如 login.contoso.com。
  • 具有原則名稱的 your-policy 。 例如,B2C_1A_signup_signin_adfs。
  • your-technical-profile ,其名稱為 SAML 識別提供者技術設定檔。 例如,Contoso-SAML2。

開啟瀏覽器並流覽至 URL。 請確定您輸入正確的 URL,而且您可以存取 XML 中繼資料檔案。 若要使用 AD FS 管理嵌入式管理單元新增信賴憑證者信任,並手動設定設定,請在同盟伺服器上執行下列程序。 管理員istrators 或本機電腦上的對等成員資格是完成此程式所需的最低需求。

  1. 在伺服器管理員中,選取工具,然後選取 AD FS 管理

  2. 選取新增信賴憑證者信任

  3. 在 [ 歡迎使用 ] 頁面上,選擇 [宣告感知 ],然後選取 [ 啟動 ]。

  4. 在 [選取資料來源] 頁面上,選取 [ 匯入有關信賴憑證者線上發佈或局域網 絡的資料],提供您的 Azure AD B2C 中繼資料 URL,然後選取 [下一步 ]。

  5. 在 [ 指定顯示名稱] 頁面上,輸入 [顯示名稱 ],在 [附注 ] 底下 輸入此信賴憑證者信任的描述,然後選取 [ 下一步 ]。

  6. 在 [ 選擇存取控制原則 ] 頁面上,選取原則,然後選取 [ 下一步 ]。

  7. 在 [ 準備新增信任 ] 頁面上,檢閱設定,然後選取 [下一步 ] 以儲存您的信賴憑證者信任資訊。

  8. 在 [ 完成] 頁面上,選取 [關閉 ],此動作會自動顯示 [ 編輯宣告規則 ] 對話方塊。

  9. 選取新增規則

  10. [宣告規則範本 ] 中,選取 [ 傳送 LDAP 屬性作為宣告 ]。

  11. 提供宣告規則名稱 針對 [屬性存放區 ],選取 [ 選取 Active Directory ],新增下列宣告,然後選取 [完成 ] 和 [ 確定 ]。

    LDAP 屬性 傳出宣告類型
    使用者主體名稱 userPrincipalName
    Surname family_name
    Given-Name given_name
    電子郵件地址 電子郵件
    Display-Name NAME

    請注意,部分名稱不會顯示在外寄宣告類型下拉式清單中。 您必須手動輸入它們。 (下拉式清單是可編輯的)。

  12. 根據您的憑證類型,您可能需要設定 HASH 演算法。 在信賴憑證者信任 (B2C Demo) 屬性視窗上,選取 [進階 ] 索引標籤,並將 [安全雜湊演算法 ] 變更 SHA-256 ,然後選取 [ 確定 ]。

  13. 在伺服器管理員中,選取工具,然後選取 AD FS 管理

  14. 選取您建立的信賴憑證者信任,從 [同盟中繼資料 ] 選取 [更新],然後選取 [ 更新 ]。

測試您的自訂原則

  1. 登入 Azure 入口網站
  2. 如果您有多個租使用者的存取權,請選取 頂端功能表中的 [設定 ] 圖示,從 [目錄 + 訂 用帳戶] 功能表切換至您的 Azure AD B2C 租使用者。
  3. 在 Azure 入口網站中,搜尋並選取 [Azure AD B2C]
  4. 在 [原則] 底下 ,選取 [ 身分識別體驗架構]
  5. 選取您的信賴憑證者原則,例如 B2C_1A_signup_signin
  6. 針對 [ 應用程式 ],選取您 先前註冊的 Web 應用程式。 回復 URL 應該會顯示 https://jwt.ms
  7. 選取 [ 立即 執行] 按鈕。
  8. 從 [註冊或登入] 頁面中,選取 [Contoso AD FS ] 以使用 Contoso AD FS 識別提供者登入。

如果登入程式成功,您的瀏覽器會重新導向至 https://jwt.ms ,以顯示 Azure AD B2C 所傳回權杖的內容。

針對 AD FS 服務進行疑難排解

AD FS 已設定為使用 Windows 應用程式記錄檔。 如果您在 Azure AD B2C 中使用自訂原則將 AD FS 設定為 SAML 識別提供者時遇到挑戰,您可能會想要檢查 AD FS 事件記錄檔:

  1. 在 Windows 搜尋列 上,輸入 事件檢視器 ,然後選取 事件檢視器 傳統型應用程式。
  2. 若要檢視不同電腦的記錄檔,請以滑鼠右鍵按一下 [事件檢視器 (本機)]。 選取 [連線至其他電腦],然後填入欄位以完成 [選取電腦] 對話方塊。
  3. 事件檢視器 中,開啟 [ 應用程式和服務記錄 ]。
  4. 選取 [AD FS ],然後選取 [管理員 ]。
  5. 若要檢視事件的詳細資訊,請按兩下該事件。

SAML 要求未使用預期的簽章演算法事件簽署

此錯誤表示 Azure AD B2C 傳送的 SAML 要求未使用 AD FS 中設定的預期簽章演算法簽署。 例如,SAML 要求是以簽章演算法 rsa-sha256 簽署,但預期的簽章演算法為 rsa-sha1 。 若要修正此問題,請確定 Azure AD B2C 和 AD FS 都使用相同的簽章演算法進行設定。

選項 1:在 Azure AD B2C 中設定簽章演算法

您可以設定如何在 Azure AD B2C 中簽署 SAML 要求。 XmlSignatureAlgorithm 中繼資料會控制 SAML 要求中的參數值 SigAlg (查詢字串或 post 參數)。 下列範例會將 Azure AD B2C 設定為使用 rsa-sha256 簽章演算法。

<Metadata>
  <Item Key="WantsEncryptedAssertions">false</Item>
  <Item Key="PartnerEntity">https://your-AD-FS-domain/federationmetadata/2007-06/federationmetadata.xml</Item>
  <Item Key="XmlSignatureAlgorithm">Sha256</Item>
</Metadata>

選項 2:在 AD FS 中設定簽章演算法

或者,您可以在 AD FS 中設定預期的 SAML 要求籤章演算法。

  1. 在伺服器管理員中,選取工具,然後選取 AD FS 管理
  2. 選取您稍早建立的 信賴憑證者信任
  3. 選取 [屬性 ],然後選取 [ 進階]
  4. 設定 [ 安全雜湊演算法 ],然後選取 [ 確定 ] 以儲存變更。

HTTP-Redirect 要求不包含已簽署要求的必要參數 'Signature'(AADB2C90168)

選項 1:在 Azure AD B2C 中將 ResponsesSigned 設定為 false

您可以在 Azure AD B2C 中停用已簽署訊息的需求。 下列範例會將 Azure AD B2C 設定為不需要簽署要求的 'Signature' 參數。

<Metadata>
  <Item Key="WantsEncryptedAssertions">false</Item>
  <Item Key="PartnerEntity">https://your-AD-FS-domain/federationmetadata/2007-06/federationmetadata.xml</Item>
  <Item Key="ResponsesSigned">false</Item>
</Metadata>

選項 2:在 AD FS 中設定信賴憑證者以簽署訊息和判斷提示

或者,您可以在 AD FS 中設定信賴憑證者,如下所示:

  1. 以 管理員istrator 開啟 PowerShell,然後執行 Set-AdfsRelyingPartyTrust -TargetName <RP Name> -SamlResponseSignature MessageAndAssertion Cmdlet 來簽署訊息和判斷提示。
  2. 執行 Set-AdfsRelyingPartyTrust -TargetName <RP Name> 並確認 SamlResponseSignature 屬性已設定為 MessageAndAssertion