使用 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 和加密套件需求 。
必要條件
- 建立使用者流程 ,讓使用者可以註冊並登入您的應用程式。
- 註冊 Web 應用程式 。
- 完成開始使用 Active Directory B2C 中的自訂原則中的 步驟
- 註冊 Web 應用程式 。
新增識別提供者
- 以 Azure AD B2C 租使用者的全域管理員身分登入 Azure 入口網站 。
- 如果您有多個租使用者的存取權,請選取 頂端功能表中的 [設定 ] 圖示,從 [目錄 + 訂 用帳戶] 功能表切換至您的 Azure AD B2C 租使用者。
- 選擇 Azure 入口網站左上角的 [所有服務 ],搜尋並選取 [Azure AD B2C ]。
- 選取 [ 識別提供者 ],然後選取 [ 新增 OpenID 連線提供者 ]。
- 輸入名稱。 例如,輸入 Contoso 。
定義 OpenId 連線識別提供者,方法是將它新增至 原則擴充檔中的 ClaimsProviders 元素。
開啟 TrustFrameworkExtensions.xml 。
尋找 ClaimsProviders 元素。 如果不存在,請在根項目底下新增它。
新增 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 租使用者中記錄的用戶端密碼。
登入 Azure 入口網站。
請確定您使用的是包含 Azure AD B2C 租使用者的目錄。 在入口網站工具列中選取 [ 目錄 + 訂用帳戶 篩選]。
在入口 網站設定 |[目錄 + 訂用帳戶 ] 頁面,在 [ 目錄名稱 ] 清單中尋找您的 Azure AD B2C 目錄,然後選取 [ 切換 ]。
選擇 Azure 入口網站左上角的 [所有服務 ],然後搜尋並選取 [Azure AD B2C ]。
在 [概觀] 頁面上,選取 [ 身分識別體驗架構 ]。
選取 [ 原則金鑰 ],然後選取 [ 新增 ]。
針對 [ 選項 ],選擇
Manual
。輸入 原則金鑰的 [名稱 ]。 例如:
ContosoSecret
。 前置詞B2C_1A_
會自動新增至金鑰的名稱。在 [秘密 ] 中 ,輸入您先前記錄的用戶端密碼。
針對 [ 金鑰使用方式 ],選取
Signature
。按一下 [建立]。
在 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。
在 [回應類型] 中,根據您的識別提供者設定,選取 code
或 id_token
。
在技術配置檔元數據中 <Item Key="response_types">
,選取 code
,或 id_token
根據您的識別提供者設定。
回應模式
回應模式會定義方法,該方法應該用來將數據從自定義識別提供者傳回 Azure AD B2C。 您可以使用下列回應模式:
form_post
:建議使用此回應模式,以獲得最佳安全性。 回應會透過 HTTPPOST
方法傳輸,並使用 格式在主體application/x-www-form-urlencoded
中編碼程式代碼或令牌。query
:程序代碼或令牌會以查詢參數的形式傳回。
在 [回應] 模式中,根據您的識別提供者設定,選取 form_post
或 query
。
在技術設定檔元數據中 <Item Key="response_mode">
,根據您的識別提供者設定,選取 form_post
或 query
。
網域提示
網域 提示 可用來直接跳到指定識別提供者的登入頁面,而不是讓使用者在可用的識別提供者清單中進行選取。
若要允許這類行為,請輸入網域提示的值。 若要跳至自定義識別提供者,請在呼叫 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" 。 |
將識別提供者新增至使用者流程
- 在您的 Azure AD B2C 租使用者中,選取 [ 使用者流程]。
- 按兩下您要新增識別提供者的使用者流程。
- 在 [ 社交識別提供者] 底下,選取您新增的識別提供者。 例如, Contoso。
- 選取 [儲存]。
測試您的使用者流程
- 若要測試您的原則,請選取 [ 執行使用者流程]。
- 針對 [ 應用程式],選取您先前註冊的名為 testapp1 的Web應用程式。 回覆 URL 應該會顯示
https://jwt.ms
。 - 選取 [ 執行使用者流程 ] 按鈕。
- 從 [註冊或登入] 頁面中,選取您要登入的識別提供者。 例如, Contoso。
如果登入程式成功,您的瀏覽器會重新導向至 https://jwt.ms
,以顯示 Azure AD B2C 所傳回令牌的內容。
新增使用者旅程圖
此時,識別提供者已設定,但尚未在任何登入頁面中提供。 如果您沒有自己的自定義使用者旅程圖,請建立現有範本使用者旅程圖的重複項目,否則請繼續進行下一個步驟。
- 從入門套件開啟 TrustFrameworkBase.xml 檔案。
- 尋找並複製包含
Id="SignUpOrSignIn"
之 UserJourney 元素的整個內容。 - 開啟 TrustFrameworkExtensions.xml 並尋找 UserJourneys 元素。 如果專案不存在,請新增一個。
- 貼上您複製為 UserJourneys 元素子系之 UserJourney 元素的整個內容。
- 重新命名使用者旅程圖的標識碼。 例如:
Id="CustomSignUpSignIn"
。
將識別提供者新增至使用者旅程圖
現在您已擁有使用者旅程圖,請將新的識別提供者新增至使用者旅程圖。 您必須先新增登入按鈕,然後將按鈕連結至動作。 動作是您稍早建立的技術配置檔。
尋找在
Type="CombinedSignInAndSignUp"
使用者旅程圖中包含 或Type="ClaimsProviderSelection"
的協調流程步驟元素。 通常是第一個協調流程步驟。 ClaimsProviderSelections 元素包含使用者可以登入的識別提供者清單。 元素的順序會控制向用戶呈現的登入按鈕順序。 新增 ClaimsProviderSelection XML 元素。 將 TargetClaimsExchangeId 的值設定為易記名稱。在下一個 協調流程步驟中,新增 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>
上傳自定義原則
- 登入 Azure 入口網站。
- 在入口網站工具列中選取 [ 目錄 + 訂 用帳戶] 圖示,然後選取包含 Azure AD B2C 租使用者的目錄。
- 在 Azure 入口網站中,搜尋並選取 [Azure AD B2C]。
- 在 [原則] 底下,選取 [身分識別體驗架構]。
- 選取 [ 上傳自定義原則],然後上傳您變更的兩個原則檔案,順序如下:擴充原則,例如
TrustFrameworkExtensions.xml
,然後是信賴憑證者原則,例如SignUpSignIn.xml
。
- 選取您的信賴憑證者原則,例如
B2C_1A_signup_signin
。 - 針對 [ 應用程式],選取您 先前註冊的 Web 應用程式。 回覆 URL 應該會顯示
https://jwt.ms
。 - 選取 [ 立即 執行] 按鈕。
- 從註冊或登入頁面,選取 [Contoso ] 以使用Google帳戶登入。
如果登入程式成功,您的瀏覽器會重新導向至 https://jwt.ms
,以顯示 Azure AD B2C 所傳回令牌的內容。
已知問題
- Azure AD B2C 不支援 JWE (JSON Web 加密)來與 OpenID 連線識別提供者交換加密令牌。
下一步
如需詳細資訊,請參閱 OpenId 連線 技術配置文件參考指南。