Share via


使用 Azure Active Directory B2C 設定使用一般 OpenID 連線註冊和登入

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

OpenID 連線 是建置在 OAuth 2.0 之上的驗證通訊協定,可用於安全使用者登入。 Azure AD B2C 支援使用此通訊協定的大部分識別提供者。

本文說明如何將自訂 OpenID 連線識別提供者新增至您的使用者流程。

重要

您的端點必須符合 Azure AD B2C 安全性需求。 舊版 TLS 和密碼已被取代。 如需詳細資訊,請參閱 Azure AD B2C TLS 和加密套件需求

必要條件

新增識別提供者

  1. 以 Azure AD B2C 租使用者的全域管理員身分登入 Azure 入口網站
  2. 如果您有多個租使用者的存取權,請選取 頂端功能表中的 [設定 ] 圖示,從 [目錄 + 訂 用帳戶] 功能表切換至您的 Azure AD B2C 租使用者。
  3. 選擇 Azure 入口網站左上角的 [所有服務 ],搜尋並選取 [Azure AD B2C ]。
  4. 選取 [ 識別提供者 ],然後選取 [ 新增 OpenID 連線提供者 ]。
  5. 輸入名稱。 例如,輸入 Contoso

定義 OpenId 連線識別提供者,方法是將它新增至 原則擴充檔中的 ClaimsProviders 元素。

  1. 開啟 TrustFrameworkExtensions.xml

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

  3. 新增 ClaimsProvider ,如下所示:

    <ClaimsProvider>
      <Domain>contoso.com</Domain>
      <DisplayName>Login with Contoso</DisplayName>
      <TechnicalProfiles>
        <TechnicalProfile Id="Contoso-OpenIdConnect">
          <DisplayName>Contoso</DisplayName>
          <Description>Login with your Contoso account</Description>
          <Protocol Name="OpenIdConnect"/>
          <Metadata>
            <Item Key="METADATA">https://your-identity-provider.com/.well-known/openid-configuration</Item>
            <Item Key="client_id">00000000-0000-0000-0000-000000000000</Item>
            <Item Key="response_types">code</Item>
            <Item Key="scope">openid profile</Item>
            <Item Key="response_mode">form_post</Item>
            <Item Key="HttpBinding">POST</Item>
            <Item Key="UsePolicyInRedirectUri">false</Item>
          </Metadata>
          <!-- <CryptographicKeys>
            <Key Id="client_secret" StorageReferenceId="B2C_1A_ContosoSecret"/>
          </CryptographicKeys> -->
          <OutputClaims>
            <OutputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="oid"/>
            <OutputClaim ClaimTypeReferenceId="tenantId" PartnerClaimType="tid"/>
            <OutputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="given_name" />
            <OutputClaim ClaimTypeReferenceId="surName" PartnerClaimType="family_name" />
            <OutputClaim ClaimTypeReferenceId="displayName" PartnerClaimType="name" />
            <OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="email" />
            <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="socialIdpAuthentication" AlwaysUseDefaultValue="true" />
            <OutputClaim ClaimTypeReferenceId="identityProvider" PartnerClaimType="iss" />
            <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="oid"/>
          </OutputClaims>
          <OutputClaimsTransformations>
            <OutputClaimsTransformation ReferenceId="CreateRandomUPNUserName"/>
            <OutputClaimsTransformation ReferenceId="CreateUserPrincipalName"/>
            <OutputClaimsTransformation ReferenceId="CreateAlternativeSecurityId"/>
            <OutputClaimsTransformation ReferenceId="CreateSubjectClaimFromAlternativeSecurityId"/>
          </OutputClaimsTransformations>
          <UseTechnicalProfileForSessionManagement ReferenceId="SM-SocialLogin"/>
        </TechnicalProfile>
      </TechnicalProfiles>
    </ClaimsProvider>
    

設定識別提供者

每個 OpenID 連線識別提供者都會描述元資料檔案,其中包含執行登入所需的大部分資訊。 元資料檔案包含要使用的 URL,以及服務公開簽署金鑰的位置等資訊。 OpenID 連線元資料檔案一律位於 結尾的 .well-known/openid-configuration 端點。 針對您要新增的 OpenID 連線識別提供者,請輸入其中繼資料 URL。

在 [ 中繼資料 URL ] 中,輸入 OpenID 連線元資料檔案的 URL。

在技術設定檔中繼資料中 <Item Key="METADATA"> ,輸入 OpenID 連線元資料檔案的 URL。

用戶端識別碼和秘密

若要允許使用者登入,身分識別提供者會要求開發人員在其服務中註冊應用程式。 此應用程式具有稱為用戶端識別碼 用戶端密碼 識別碼。

用戶端密碼是選擇性的。 不過,如果 Response 類型 code ,則必須提供用戶端密碼,這會使用秘密來交換權杖的程式碼。

若要新增用戶端識別碼和用戶端密碼,請從識別提供者複製這些值,並將其輸入對應的欄位。

在技術設定檔中繼資料中 <Item Key="client_id"> ,輸入用戶端識別碼。

建立原則金鑰

如果需要用戶端密碼,請儲存您先前在 Azure AD B2C 租使用者中記錄的用戶端密碼。

  1. 登入 Azure 入口網站

  2. 請確定您使用的是包含 Azure AD B2C 租使用者的目錄。 在入口網站工具列中選取 [ 目錄 + 訂用帳戶 篩選]。

  3. 在入口 網站設定 |[目錄 + 訂用帳戶 ] 頁面,在 [ 目錄名稱 ] 清單中尋找您的 Azure AD B2C 目錄,然後選取 [ 切換 ]。

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

  5. 在 [概觀] 頁面上,選取 [ 身分識別體驗架構 ]。

  6. 選取 [ 原則金鑰 ],然後選取 [ 新增 ]。

  7. 針對 [ 選項 ],選擇 Manual

  8. 輸入 原則金鑰的 [名稱 ]。 例如: ContosoSecret 。 前置詞 B2C_1A_ 會自動新增至金鑰的名稱。

  9. 在 [秘密 ] 中 ,輸入您先前記錄的用戶端密碼。

  10. 針對 [ 金鑰使用方式 ],選取 Signature

  11. 按一下 [建立]。

  12. 在 XML 元素中 CryptographicKeys ,新增下列元素:

    <CryptographicKeys>
      <Key Id="client_secret" StorageReferenceId="B2C_1A_ContosoSecret"/>
    </CryptographicKeys>
    

範圍

範圍會定義您想要從識別提供者收集的資訊和許可權,例如 openid profile 。 若要從識別提供者接收識別碼權杖, openid 必須指定範圍。

如果沒有識別碼權杖,使用者就無法使用自訂識別提供者登入 Azure AD B2C。 其他範圍可以附加以空格分隔。 請參閱自訂識別提供者的檔,以查看有哪些其他範圍可供使用。

在 [ 範圍 ] 中,輸入來自識別提供者的範圍。 例如: openid profile

在技術設定檔中繼資料中 <Item Key="scope"> ,輸入識別提供者的範圍。 例如: openid profile

回應類型

回應類型描述在對自訂識別提供者的初始呼叫 authorization_endpoint 中傳回何種資訊。 您可以使用下列回應類型:

  • code:根據 授權碼流程 ,程式碼會傳回至 Azure AD B2C。 Azure AD B2C 會繼續呼叫 token_endpoint 來交換令牌的程序代碼。
  • id_token:標識元令牌會從自定義識別提供者傳回至 Azure AD B2C。

在 [回應類型] 中,根據您的識別提供者設定,選取 codeid_token

在技術配置檔元數據中 <Item Key="response_types"> ,選取 code,或 id_token 根據您的識別提供者設定。

回應模式

回應模式會定義方法,該方法應該用來將數據從自定義識別提供者傳回 Azure AD B2C。 您可以使用下列回應模式:

  • form_post:建議使用此回應模式,以獲得最佳安全性。 回應會透過 HTTP POST 方法傳輸,並使用 格式在主體 application/x-www-form-urlencoded 中編碼程式代碼或令牌。
  • query:程序代碼或令牌會以查詢參數的形式傳回。

在 [回應] 模式,根據您的識別提供者設定,選取 form_postquery

在技術設定檔元數據中 <Item Key="response_mode"> ,根據您的識別提供者設定,選取 form_postquery

網域提示

網域 提示 可用來直接跳到指定識別提供者的登入頁面,而不是讓使用者在可用的識別提供者清單中進行選取。

若要允許這類行為,請輸入網域提示的值。 若要跳至自定義識別提供者,請在呼叫 Azure AD B2C 進行登入時,將 參數 domain_hint=<domain hint value> 附加至要求的結尾。

在 [ 網域提示] 中,輸入網域提示中使用的功能變數名稱。

<Domain>contoso.com</Domain> 技術配置檔 XML 元素中,輸入網域提示中使用的功能變數名稱。 例如: contoso.com

宣告對應

在自定義識別提供者將標識碼令牌傳回 Azure AD B2C 之後,Azure AD B2C 必須能夠將所接收令牌的宣告對應至 Azure AD B2C 辨識及使用的宣告。 針對下列每個對應,請參閱自定義識別提供者的檔,以了解在識別提供者令牌中傳回的宣告:

  • 用戶標識碼:輸入為登入使用者提供唯一 標識碼 的宣告。
  • 顯示名稱:輸入提供用戶顯示名稱或完整名稱的宣告。
  • 指定名稱:輸入提供 使用者名字 的宣告。
  • 姓氏:輸入提供使用者姓氏的宣告。
  • 電子郵件:輸入提供 使用者電子郵件位址 的宣告。

元素 OutputClaims 包含識別提供者所傳回的宣告清單。 將原則中定義的宣告名稱對應至識別提供者中定義的名稱。 在 元素底 <OutputClaims> 下,使用 PartnerClaimType 識別提供者所定義的對應宣告名稱來設定 屬性。

ClaimTypeReferenceId PartnerClaimType
issuerUserId 輸入提供登入使用者唯一 標識碼 的宣告。
displayName 輸入提供用戶顯示名稱或完整名稱的宣告。
givenName 輸入提供 使用者名字 的宣告。
surName 輸入提供 使用者姓氏 的宣告。
email 輸入提供 使用者電子郵件位址 的宣告。
identityProvider 輸入提供令牌簽發者名稱的宣告。 例如: iss 。 如果識別提供者未在令牌中包含簽發者宣告,請使用識別提供者的唯一標識符來設定 DefaultValue 屬性。 例如: DefaultValue="contoso.com"

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

  1. 在您的 Azure AD B2C 租使用者中,選取 [ 使用者流程]。
  2. 按兩下您要新增識別提供者的使用者流程。
  3. 在 [ 社交識別提供者] 底下,選取您新增的識別提供者。 例如, Contoso
  4. 選取 [儲存]。

測試您的使用者流程

  1. 若要測試您的原則,請選取 [ 執行使用者流程]。
  2. 針對 [ 應用程式],選取您先前註冊的名為 testapp1 的Web應用程式。 回覆 URL 應該會顯示 https://jwt.ms
  3. 選取 [ 執行使用者流程 ] 按鈕。
  4. 從 [註冊或登入] 頁面中,選取您要登入的識別提供者。 例如, Contoso

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

新增使用者旅程圖

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

  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 ] 以使用Google帳戶登入。

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

已知問題

  • Azure AD B2C 不支援 JWE (JSON Web 加密)來與 OpenID 連線識別提供者交換加密令牌。

下一步

如需詳細資訊,請參閱 OpenId 連線 技術配置文件參考指南。