在 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 ID。 與身分識別提供者同盟可讓使用者使用其現有的社交或企業身分識別登入。
通訊協定
Protocol 元素的 Name 屬性必須設定為 OpenIdConnect
。 例如,MSA-OIDC 技術設定檔的通訊協定為 OpenIdConnect
:
<TechnicalProfile Id="MSA-OIDC">
<DisplayName>Microsoft Account</DisplayName>
<Protocol Name="OpenIdConnect" />
...
輸入宣告
不需要 InputClaims 和 InputClaimsTransformations 元素。 但您可能會想要將其他參數傳送至識別提供者。 下列範例會將具有的值contoso.com
domain_hint查詢字串參數新增至授權要求。
<InputClaims>
<InputClaim ClaimTypeReferenceId="domain_hint" DefaultValue="contoso.com" />
</InputClaims>
輸出宣告
OutputClaims 元素包含 OpenID Connect 識別提供者所傳回的宣告清單。 您可能需要將原則中定義的宣告名稱對應至識別提供者中定義的名稱。 您也可以包含識別提供者未傳回的宣告,只要您設定 DefaultValue
屬性即可。
OutputClaimsTransformations 元素可能包含 OutputClaimsTransformation 元素的集合,這些元素可用來修改輸出宣告或產生新的宣告。
下列範例顯示Microsoft帳戶識別提供者所傳回的宣告:
- 對應至issuerUserId宣告的子宣告。
- 對應至 displayName 宣告的名稱宣告。
- 沒有名稱對應的電子郵件。
技術配置檔也會傳回識別提供者未傳回的宣告:
- 包含識別提供者名稱的 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元資料的值優先於 authorization_endpoint OpenID 已知組態端點中指定的 。 URL 可以包含 {tenant} 表示式,此運算式會取代為租用戶名稱。 |
end_session_endpoint | No | 結束工作階段端點的URL。 中指定的資料的值 end_session_endpoint 優先於 end_session_endpoint OpenID 已知組態端點中指定的 。 |
issuer | No | OpenID Connect 識別提供者的唯一標識符。 簽發者元資料的值優先於 issuer OpenID 已知組態端點中指定的 。 如果指定,Azure AD B2C 會檢查識別提供者傳回之令牌中的宣告是否 iss 等於簽發者元數據中指定的宣告。 |
ProviderName | No | 識別提供者的名稱。 |
response_types | No | 根據 OpenID Connect Core 1.0 規格的回應類型。 可能的值:id_token 、code 或 token 。 |
response_mode | No | 識別提供者用來將結果傳回 Azure AD B2C 的方法。 可能的值: query 、 form_post (預設值)或 fragment 。 |
範圍 (scope) | No | 根據 OpenID Connect Core 1.0 規格所定義的要求範圍。 例如 openid 、 profile 與 email 。 |
HttpBinding | No | 對存取令牌和宣告令牌端點的預期 HTTP 系結。 可能的值: GET 或 POST 。 |
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 | 針對輸入和輸出宣告,指定宣告解析是否包含在技術配置檔中。 可能的值: true 、 或 false (預設值)。 如果您要在技術設定檔中使用宣告解析程式,請將此設定為 true 。 |
token_endpoint_auth_method | No | 指定 Azure AD B2C 如何將驗證標頭傳送至令牌端點。 可能的值: client_secret_post (預設值),和 client_secret_basic 、 private_key_jwt 。 如需詳細資訊,請參閱 OpenID Connect 用戶端驗證一節。 |
token_signing_algorithm | No | 指定要在 設定為 private_key_jwt 時token_endpoint_auth_method 使用的簽署演算法。 可能的值: 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_post 為 或 client_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 必須位於所有小寫中。
範例: