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

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

必要條件

建立AD FS 應用程式

若要在 Azure Active Directory B2C (Azure AD B2C) 中啟用 AD FS 帳戶的使用者登入,請在 AD FS 中建立應用程式群組。 如需詳細資訊,請參閱使用 OpenID 連線 搭配 AD FS 2016 和更新版本建置 Web 應用程式

若要建立應用程式群組,請遵循下列步驟:

  1. 伺服器管理員 中,選取 [工具],然後選取 [AD FS 管理]。
  2. 在 [AD FS 管理] 中,以滑鼠右鍵按一下 [應用程式群組],然後選取 [新增應用程式群組]
  3. 在 [應用程式群組精靈 歡迎使用 ] 畫面上:
    1. 輸入應用程式的名稱。 例如, Azure AD B2C 應用程式
    2. 在 [用戶端伺服器應用程式] 下,選取存取 Web 應用程式範本的網頁瀏覽器。
    3. 選取 [下一步] 。
  4. 在 [應用程式群組精靈 原生應用程式 ] 畫面上:
    1. 複製 [用戶端識別碼] 值。 用戶端識別碼是AD FS 應用程式識別碼。 本文稍後將需要應用程式識別碼。
    2. 在 [重新導向 URI] 中,輸入 ,然後輸入 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-domain-name您的自訂網域取代 your-tenant-name
    3. 選取 [下一步],然後選取 [下一],然後再次選取 [下一步],以完成應用程式註冊精靈。
    4. 選取 [關閉]

設定應用程式宣告

在此步驟中,設定宣告AD FS 應用程式會傳回 Azure AD B2C。

  1. 在 [ 應用程式群組] 中,選取您建立的應用程式。

  2. 在應用程式屬性視窗中的 [應用程式] 底下,選取 [Web 應用程式]。 然後選取 [ 編輯]。 Screenshot that shows how to edit a web application.

  3. 選取 [ 發行轉換規則] 索引標籤 。然後選取 [ 新增規則]。

  4. [宣告規則範本] 中,選取 [傳送 LDAP 屬性作為宣告],然後選取 [下一步]。

  5. 提供宣告規則名稱。 針對 [ 屬性存放區],選取 [Active Directory],新增下列宣告。

    LDAP 屬性 傳出宣告類型
    使用者主體名稱 upn
    Surname family_name
    Given-Name given_name
    Display-Name NAME

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

  6. 選取 [完成]。

  7. 選取 [套用],然後選取 [確定]。

  8. 再次選取 [ 確定 ] 以完成。

將AD FS 設定為識別提供者

  1. 以 Azure AD B2C 租使用者的全域管理員身分登入 Azure 入口網站

  2. 如果您有多個租使用者的存取權,請選取頂端功能表中的 設定 圖示,從 [目錄 + 訂用帳戶] 功能表切換至您的 Azure AD B2C 租使用者。

  3. 選擇 Azure 入口網站 左上角的 [所有服務],然後搜尋並選取 [Azure AD B2C]。

  4. 選取 [識別提供者],然後選取 [新增 OpenID 連線 提供者]。

  5. 輸入名稱。 例如, Contoso

  6. 針對 [元數據 URL],輸入 AD FS OpenID 連線 組態檔的 URL。 例如:

    https://adfs.contoso.com/adfs/.well-known/openid-configuration 
    
  7. 針對 [ 用戶端識別碼],輸入您先前記錄的應用程式識別碼。

  8. 針對 [ 範圍],輸入 openid

  9. 針對 [ 回應類型],選取 [id_token]。 因此, 不需要用戶端秘密 值。 深入瞭解在新增一般 OpenID 連線 識別提供者時,使用用戶端識別碼和秘密

  10. (選擇性)針對 [ 網域提示],輸入 contoso.com。 如需詳細資訊,請參閱 使用 Azure Active Directory B2C 設定直接登入。

  11. 在 [識別提供者宣告對應] 底下,選取下列宣告:

    • 使用者識別碼upn
    • 顯示名稱unique_name
    • 指定名稱given_name
    • 姓氏:family_name
  12. 選取 [儲存]。

將AD FS識別提供者新增至使用者流程

此時,AD FS (Contoso) 識別提供者已設定,但尚未在任何登入頁面中提供。 若要將AD FS識別提供者新增至使用者流程:

  1. 在您的 Azure AD B2C 租使用者中,選取 [ 使用者流程]。
  2. 選取您想要新增AD FS識別提供者 (Contoso) 的使用者流程。
  3. 在 [ 社交識別提供者] 底下,選取 [Contoso]。
  4. 選取 [儲存]。
  5. 若要測試您的原則,請選取 [ 執行使用者流程]。
  6. 針對 [ 應用程式],選取您先前註冊的名為 testapp1 的Web應用程式。 回覆 URL 應該會顯示 https://jwt.ms
  7. 選取 [ 執行使用者流程 ] 按鈕。
  8. 從 [註冊或登入] 頁面中,選取 [Contoso] 以使用 Contoso 帳戶登入。

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

將AD FS 設定為識別提供者

若要讓使用者使用 AD FS 帳戶登入,您必須將 AD FS 定義為 Azure AD B2C 可以透過端點進行通訊的宣告提供者。

  1. 開啟 TrustFrameworkExtensions.xml

  2. 尋找 ClaimsProviders 元素。 如果不存在,請在根元素底下新增它。

  3. 新增 ClaimsProvider,如下所示:

    <ClaimsProvider>
      <Domain>contoso.com</Domain>
      <DisplayName>Contoso</DisplayName>
      <TechnicalProfiles>
        <TechnicalProfile Id="Contoso-OpenIdConnect">
          <DisplayName>Contoso</DisplayName>
          <Protocol Name="OpenIdConnect" />
          <Metadata>
            <Item Key="METADATA">https://your-adfs-domain/adfs/.well-known/openid-configuration</Item>
            <Item Key="response_types">id_token</Item>
            <Item Key="response_mode">form_post</Item>
            <Item Key="scope">openid</Item>
            <Item Key="HttpBinding">POST</Item>
            <Item Key="UsePolicyInRedirectUri">0</Item>
            <!-- Update the Client ID below to the Application ID -->
            <Item Key="client_id">Your AD FS application ID</Item>
          </Metadata>
          <OutputClaims>
            <OutputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="upn" />
            <OutputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="given_name" />
            <OutputClaim ClaimTypeReferenceId="surname" PartnerClaimType="family_name" />
            <OutputClaim ClaimTypeReferenceId="displayName" PartnerClaimType="unique_name" />
            <OutputClaim ClaimTypeReferenceId="identityProvider" PartnerClaimType="iss"  />
            <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="socialIdpAuthentication" AlwaysUseDefaultValue="true" />
          </OutputClaims>
          <OutputClaimsTransformations>
            <OutputClaimsTransformation ReferenceId="CreateRandomUPNUserName" />
            <OutputClaimsTransformation ReferenceId="CreateUserPrincipalName" />
            <OutputClaimsTransformation ReferenceId="CreateAlternativeSecurityId" />
          </OutputClaimsTransformations>
          <UseTechnicalProfileForSessionManagement ReferenceId="SM-SocialLogin" />
        </TechnicalProfile>
      </TechnicalProfiles>
    </ClaimsProvider>
    
  4. 針對 [元數據 URL],輸入 AD FS OpenID 連線 組態檔的 URL。 例如:

    https://adfs.contoso.com/adfs/.well-known/openid-configuration 
    
  5. 將client_id設定為應用程式註冊中的應用程式識別碼。

  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-OpenIdConnect" />
  </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

測試您的自定義原則

  1. 選取您的信賴憑證者原則,例如 B2C_1A_signup_signin
  2. 針對 [ 應用程式],選取您 先前註冊的 Web 應用程式。 回覆 URL 應該會顯示 https://jwt.ms
  3. 選取 [ 立即 執行] 按鈕。
  4. 從 [註冊或登入] 頁面中,選取 [Contoso] 以使用 Contoso 帳戶登入。

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

下一步

瞭解如何將 AD-FS令牌傳遞至您的應用程式