分享方式:


定義 Azure Active Directory B2C 自訂原則中的 OpenID Connect 技術設定檔

注意

在 Azure Active Directory B2C 中,自訂原則的主要用途為處理複雜的案例。 在大部分情況下,我們建議使用內建的使用者流程。 如果您尚未執行此操作,請於在 Active Directory B2C 中開始使用自訂原則中,了解自訂原則入門套件。

Azure Active Directory B2C (Azure AD B2C) 可支援 OpenID Connect 通訊協定識別提供者。 OpenID Connect 1.0 會定義 OAuth 2.0 上的身分識別層,是先進新式驗證通訊協定的代表。 使用 OpenID Connect 技術設定檔,您可以與 OpenID Connect 型識別提供者建立同盟,例如Microsoft Entra識別碼。 與識別提供者同盟,可讓使用者使用其現有的社交或企業身分識別登入。

通訊協定

Protocol 元素的 Name 屬性必須設定為 OpenIdConnect。 例如,MSA-OIDC 技術設定檔的通訊協定是 OpenIdConnect

<TechnicalProfile Id="MSA-OIDC">
  <DisplayName>Microsoft Account</DisplayName>
  <Protocol Name="OpenIdConnect" />
  ...

輸入宣告

InputClaimsInputClaimsTransformations 元素不是必要項目。 但您可能會想要將其他參數傳送至您的識別提供者。 下列範例會將 domain_hint 查詢字串參數 (包含 contoso.com 的值) 新增至授權要求。

<InputClaims>
  <InputClaim ClaimTypeReferenceId="domain_hint" DefaultValue="contoso.com" />
</InputClaims>

輸出宣告

OutputClaims 元素包含 OpenID Connect 識別提供者傳回的宣告清單。 您可能需要將原則中定義的宣告名稱對應至識別提供者中定義的名稱。 只要設定了 DefaultValue 屬性,也可以加入識別提供者未傳回的宣告。

OutputClaimsTransformations 元素可能含有 OutputClaimsTransformation 的集合,用於修改輸出宣告或產生新的輸出宣告。

下列範例顯示 Microsoft 帳戶識別提供者傳回的宣告:

  • 對應至 issuerUserId 宣告的 sub 宣告。
  • 對應至 displayName 宣告的 name 宣告。
  • email 無名稱對應。

技術設定檔也會傳回識別提供者未傳回的宣告:

  • 包含識別提供者名稱的 identityProvider 宣告。
  • 具有 socialIdpAuthentication 預設值的 authenticationSource 宣告。
<OutputClaims>
  <OutputClaim ClaimTypeReferenceId="identityProvider" DefaultValue="live.com" />
  <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="socialIdpAuthentication" />
  <OutputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="sub" />
  <OutputClaim ClaimTypeReferenceId="displayName" PartnerClaimType="name" />
  <OutputClaim ClaimTypeReferenceId="email" />
</OutputClaims>

中繼資料

屬性 必要 說明
client_id Yes 識別提供者的應用程式識別碼。
IdTokenAudience No id_token 的對象。 如果有指定,Azure AD B2C 會檢查識別提供者所傳回權杖中的 aud 宣告是否等於 IdTokenAudience 中繼資料中指定的宣告。
METADATA Yes 指向 OpenID Connect 識別提供者組態文件的 URL,也稱為 OpenID 已知組態端點。 URL 可以包含 {tenant} 運算式,該運算式會取代為租用戶名稱。
authorization_endpoint No 指向 OpenID Connect 識別提供者組態授權端點的 URL。 authorization_endpoint 中繼資料的值會優先於 OpenID 已知組態端點中指定的 authorization_endpoint。 URL 可以包含 {tenant} 運算式,該運算式會取代為租用戶名稱。
end_session_endpoint No 結束工作階段端點的 URL。 end_session_endpoint 中繼資料的值會優先於 OpenID 已知組態端點中指定的 end_session_endpoint
簽發者 No OpenID Connect 識別提供者的唯一識別碼。 簽發者中繼資料的值會優先於 OpenID 已知組態端點中指定的 issuer。 如果有指定,Azure AD B2C 會檢查識別提供者所傳回權杖中的 iss 宣告是否等於簽發者中繼資料中指定的宣告。
ProviderName No 識別提供者的名稱。
response_types No 根據 OpenID Connect Core 1.0 規格的回應類型。 可能的值:id_tokencodetoken
response_mode No 識別提供者用來將結果傳送回 Azure AD B2C 的方法。 可能的值:queryform_post (預設值) 或 fragment
scope No 根據 OpenID Connect Core 1.0 規格所定義要求的範圍。 例如,openidprofileemail
HttpBinding No 繫結至存取權杖和宣告權杖端點的預期 HTTP。 可能的值:GETPOST
ValidTokenIssuerPrefixes No 使用多租使用者識別提供者,例如Microsoft Entra識別碼時,可用來登入每個租使用者的金鑰。
UsePolicyInRedirectUri No 表明在建構重新導向 URI 時,是否使用原則。 在設定識別提供者中的應用程式時,需要指定重新導向 URI。 重新導向 URI 會指向 Azure AD B2C,https://{your-tenant-name}.b2clogin.com/{your-tenant-name}.onmicrosoft.com/oauth2/authresp。 如果指定 true,則需要為每個使用的原則新增重新導向 URI。 例如:https://{your-tenant-name}.b2clogin.com/{your-tenant-name}.onmicrosoft.com/{policy-name}/oauth2/authresp
MarkAsFailureOnStatusCode5xx No 表明如果 Http 狀態碼在 5xx 範圍內,是否應該將外部服務的要求標記為失敗。 預設為 false
DiscoverMetadataByTokenIssuer No 表示是否應使用 JWT 權杖的簽發者來探索 OIDC 中繼資料。若您必須根據簽發者建置中繼資料端點 URL,請將此設定為 true
IncludeClaimResolvingInClaimsHandling No 針對輸入和輸出宣告,指定技術設定檔中是否包含宣告解析。 可能的值為:truefalse (預設)。 如果您想要在技術設定檔中使用宣告解析器,請將此設定為 true
token_endpoint_auth_method No 指定 Azure AD B2C 將驗證標頭傳送至權杖端點的方式。 可能的值: client_secret_post (預設) 和 client_secret_basicprivate_key_jwt 。 如需詳細資訊,請參閱 OpenID Connect 用戶端驗證一節
token_signing_algorithm No token_endpoint_auth_method 設為 private_key_jwt 時,指定要使用的簽署演算法。 可能的值:RS256 (預設) 或 RS512
SingleLogoutEnabled No 指出在登入期間,技術設定檔是否會嘗試從同盟識別提供者登出。 如需詳細資訊,請參閱 Azure AD B2C 工作階段登出。可能的值:true (預設) 或 false
ReadBodyClaimsOnIdpRedirect No 設定為 true 以從識別提供者重新導向的回應本文讀取宣告。 此中繼資料會搭配 Apple ID 使用,其中宣告會在回應承載中傳回。
<Metadata>
  <Item Key="ProviderName">https://login.live.com</Item>
  <Item Key="METADATA">https://login.live.com/.well-known/openid-configuration</Item>
  <Item Key="response_types">code</Item>
  <Item Key="response_mode">form_post</Item>
  <Item Key="scope">openid profile email</Item>
  <Item Key="HttpBinding">POST</Item>
  <Item Key="UsePolicyInRedirectUri">false</Item>
  <Item Key="client_id">Your Microsoft application client ID</Item>
</Metadata>

UI 元素

您可以使用下列設定來設定失敗時所顯示的錯誤訊息。 中繼資料應該在 OpenID Connect 技術設定檔中設定。 錯誤訊息可以當地語系化

屬性 必要 描述
UserMessageIfClaimsPrincipalDoesNotExist No 如果在目錄中找不到具有所提供使用者名稱的帳戶,為使用者顯示的訊息。
UserMessageIfInvalidPassword No 如果密碼不正確,要向使用者顯示的訊息。
UserMessageIfOldPasswordUsed No 如果使用了舊密碼,要向使用者顯示的訊息。

密碼編譯金鑰

CryptographicKeys 元素包含下列屬性:

屬性 必要 描述
client_secret Yes 識別提供者應用程式的用戶端密碼。 只有當 response_types 中繼資料設定為 code,且 token_endpoint_auth_method 設定為 client_secret_postclient_secret_basic 時,才需要此密碼編譯金鑰。 在此情況下,Azure AD B2C 會進行另一次呼叫,以交換存取權杖的授權碼。 如果中繼資料設為 id_token,則可以省略密碼編譯金鑰。
assertion_signing_key Yes 將用來簽署用戶端判斷提示的 RSA 私密金鑰。 只有當 token_endpoint_auth_method 中繼資料設定為 private_key_jwt 時,才需要此密碼編譯金鑰。

重新導向 URI

在設定識別提供者的重新導向 URI 時,請輸入 https://{your-tenant-name}.b2clogin.com/{your-tenant-name}.onmicrosoft.com/oauth2/authresp。 請務必將 {your-tenant-name} 取代為您的租用戶名稱。 重新導向 URI 必須全部小寫。

範例: