在 Azure Active Directory B2C 中管理使用者存取權

這很重要

自 2025 年 5 月 1 日起,Azure AD B2C 將不再可供新客戶購買。 在我們的常見問題中深入瞭解。

本文討論如何使用 Azure Active Directory B2C (Azure AD B2C) 來管理應用程式的使用者存取權。 應用程式中的存取管理包括:

  • 識別未成年人並控制使用者對應用程式的存取。
  • 要求家長同意未成年人使用您的應用程式。
  • 從使用者收集出生和國家/地區數據。
  • 擷取使用條款協議並管理存取權。

備註

在 Azure Active Directory B2C 中, 自定義原則 的設計主要是為了解決複雜的案例。 在大部分情況下,我們建議您使用內 建的使用者流程。 如果您尚未這麼做,請了解開始使用 Active Directory B2C 中的自定義原則入門套件。

控制未成年存取

應用程式和組織可能會決定限制未成年人使用不適合他們群體的應用程式和服務。 或者,應用程式和組織可以決定接受未成年人,並隨後管理父母同意,並按照商務規則和法規允許為未成年人提供允許的體驗。

如果使用者被識別為次要使用者,您可以將 Azure AD B2C 中的使用者流程設定為三個選項之一:

  • 將已簽署的 JWT id_token傳回應用程式:使用者已在目錄中註冊,且令牌會傳回給應用程式。 然後,應用程式會藉由套用商務規則繼續進行。 例如,應用程式可能會繼續進行家長同意程序。 若要使用此方法,請選擇從應用程式接收 ageGroup 和 consentProvidedForMinor 宣告。

  • 將未簽署的 JSON 令牌傳送至應用程式:Azure AD B2C 會通知應用程式使用者是未成年人,並提供使用者家長同意的狀態。 然後,應用程式會藉由套用商務規則繼續進行。 單憑一個 JSON 令牌無法成功完成應用程式的身份驗證。 應用程式必須根據 JSON 令牌中包含的宣告來處理未經驗證的使用者,這些宣告可能包含 名稱、 電子郵件、 ageGroup 和 consentProvidedForMinor。

  • 封鎖使用者:如果使用者是未成年人,且未提供家長同意,Azure AD B2C 可以通知用戶他們遭到封鎖。 不會發出令牌、封鎖存取權,而且不會在註冊旅程期間建立用戶帳戶。 若要實作此通知,您可以提供適當的 HTML/CSS 內容頁面來通知用戶並呈現適當的選項。 應用程式不需要採取進一步的動作來進行新的註冊。

根據應用程式法規,家長同意可能需要由已驗證為成人的使用者授與。 Azure AD B2C 並不具備驗證個人年齡的功能,且無法讓經驗證的成年人為未成年人授權父母同意。 此體驗必須由應用程式或其他服務提供者提供。

以下是收集家長同意的使用者流程範例:

  1. Microsoft Graph API 作業會將用戶識別為次要,並以未簽署 JSON 令牌的形式將用戶數據傳回給應用程式。

  2. 應用程式會處理 JSON 令牌,並顯示未成年人的畫面,通知他們需要家長同意,並要求家長在線同意。

  3. Azure AD B2C 會顯示一個使用者可以正常登入的登入流程,並將令牌發行給設定為包含 legalAgeGroupClassification = "minorWithParentalConsent" 的應用程式。 應用程式會收集家長的電子郵件位址,並確認家長是成年人。 若要這樣做,它會使用受信任的來源,例如國家/地區標識符辦公室、授權驗證或信用卡證明。 如果驗證成功,應用程式會提示未成年人使用 Azure AD B2C 使用者流程登入。 如果拒絕同意(例如,如果 legalAgeGroupClassification = “minorWithoutParentalConsent”),Azure AD B2C 會將 JSON 令牌 (不是登入) 傳回應用程式以重新啟動同意程式。 您可以選擇性地自定義使用者流程,讓未成年人或成人可以藉由將註冊碼傳送至未成年人的電子郵件地址或記錄中的成人電子郵件位址,以重新取得未成年人帳戶的存取權。

  4. 應用程式會提供未成年人撤銷同意的選項。

  5. 當未成年人或成人撤銷同意時,Microsoft Graph API 可用來變更 consentProvidedForMinor 以 拒絕。 或者,應用程式可以選擇刪除已撤銷其同意的未成年人。 您可以選擇性地自定義使用者流程,讓已驗證的未成年人(或使用未成年人帳戶的父系)可以撤銷同意。 Azure AD B2C 會將 consentProvidedForMinor 記錄 為拒絕。

如需 legalAgeGroupClassification、 consentProvidedForMinor 和 ageGroup 的詳細資訊,請參閱 用戶資源類型。 如需自定義屬性的詳細資訊,請參閱 使用自定義屬性收集取用者的相關信息。 當您使用 Microsoft Graph API 尋址擴充屬性時,必須使用屬性的長版本,例如 extension_18b70cf9bb834edd8f38521c2583cd86_dateOfBirth: 2011-01-01T00:00:00Z。

收集出生日期和國家/地區數據

應用程式可能會依賴 Azure AD B2C,在註冊期間收集所有使用者的出生日期(DOB)和國家/地區資訊。 如果這項資訊還不存在,應用程式可以在下一次驗證(登入)旅程期間向使用者要求。 使用者若未提供 DOB 和國家/地區資訊,就無法繼續。 Azure AD B2C 會使用資訊來判斷個人是否根據該國家/地區的法規標準將個人視為未成年人。

自定義的使用者流程可以收集 DOB 和國家/地區資訊,並使用 Azure AD B2C 宣告轉換來判斷 ageGroup ,並在目錄中保存結果(或直接保存 DOB 和國家/地區資訊)。

下列步驟顯示用來從使用者的出生日期計算 ageGroup 的邏輯:

  1. 請嘗試依清單中的國家/地區代碼來尋找國家/地區。 如果找不到國家/地區,請回復為 Default。

  2. 如果 MinorConsent 節點存在於國家/地區元素中:

    一。 計算用戶必須出生的日期,才能視為成人。 例如,如果目前的日期是 2015 年 3 月 14 日,而 MinorConsent 為 18,則出生日期不得晚於 2000 年 3 月 14 日。

    b。 比較最小出生日期與實際的出生日期。 如果最低出生日期早於使用者的出生日期,計算會傳回 Minor 作為群組年齡的計算結果。

  3. 如果 Country/region 元素中有 MinorNoConsentRequired 節點,請使用 MinorNoConsentRequired 的值重複步驟 2a 和 2b。 若最小出生日期早於使用者的出生日期,則 2b 的輸出將返回 MinorNoConsentRequired。

  4. 如果兩項計算都未傳回 true,則計算會傳回 成人。

如果應用程式已透過其他方法可靠地收集 DOB 或國家/地區資料,應用程式可能會使用圖形 API 以這項資訊來更新用戶記錄。 例如:

  • 如果使用者已知為成人,請使用成人值更新目錄屬性 ageGroup。
  • 如果使用者已知為未成年人,請使用 Minor 的值更新目錄屬性 ageGroup,並視需要設定 consentProvidedForMinor。

次要計算規則

年齡控制涉及兩個年齡值:某人不再被視為未成年人的年齡,以及未成年人必須擁有父母同意的年齡。 下表列出用於定義未成年人和需要同意的未成年人的年齡規則。

國家/地區 國家/地區名稱 未成年同意的年齡 未成年
預設 沒有 沒有 18
AE 阿拉伯聯合大公國 沒有 21
在 (Depending on context and need for details, this may change significantly) 奧地利 14 18
是 比利時 14 18
BG 保加利亞 16 18
BH 巴林 沒有 21
公分 喀麥隆 沒有 21
CY 塞普勒斯 16 18
CZ 捷克共和國 16 18
德 德國 16 18
DK 丹麥 16 18
EE 愛沙尼亞 16 18
EG 埃及 沒有 21
ES 西班牙 13 18
FR 法國 16 18
國標 英國 13 18
希臘 希臘 16 18
人力資源 克羅埃西亞 16 18
胡 匈牙利 16 18
網路瀏覽器 (Internet Explorer) 愛爾蘭 13 18
資訊技術 義大利 16 18
韓國 韓國、共和國 14 18
LT 立陶宛 16 18
路 盧森堡 16 18
低壓 拉脫維亞 16 18
MT 馬爾他 16 18
無 納米比亞 沒有 21
荷蘭 荷蘭 16 18
PL 波蘭 13 18
鉑 葡萄牙 16 18
RO 羅馬尼亞 16 18
硒 瑞典 13 18
新加坡 新加坡 沒有 21
國際單位制 斯洛維尼亞 16 18
SK 斯洛伐克 16 18
TD 乍得 沒有 21
TH 泰國 沒有 20
台灣 臺灣 沒有 20
美國 美國 13 18

擷取使用規定合約

當您開發應用程式時,您通常會在使用者的應用程式中擷取他們對使用規定的接受,而無需或僅需使用者目錄的少量參與。 不過,您可以使用 Azure AD B2C 使用者流程,來收集使用者對使用條款的接受,同時如果未接受則限制存取權,並根據最新的接受日期及使用條款的最新版本日期,強制接受對未來變更的使用條款。

使用規定 也可能包括「同意與第三方共享數據」。根據當地法規和商務規則,您可以收集用戶同時接受這兩個條件的接受,或允許使用者接受一個條件,而不是另一個條件。

下列步驟說明如何管理使用規定:

  1. 使用圖形 API 和擴充屬性,記錄接受使用規定和接受日期。 您可以使用內建的使用者流程和自訂原則來執行此動作。 建議您建立和使用 extension_termsOfUseConsentDateTime 和 extension_termsOfUseConsentVersion 屬性。

  2. 建立標示為「接受使用規定」的必要複選框,並在註冊期間記錄結果。 您可以使用內建的使用者流程和自訂原則來執行此動作。

  3. Azure AD B2C 會儲存使用規定合約和使用者的接受。 您可以藉由讀取用來記錄回應的延伸模組屬性來查詢任何用戶的狀態(例如,讀取 termsOfUseTestUpdateDateTime)。 您可以使用內建的使用者流程和自訂原則來執行此動作。

  4. 藉由將接受日期與最新版本使用規定日期進行比較,要求接受更新的使用規定。 您只能使用自定義使用者流程來比較日期。 使用 擴充屬性extension_termsOfUseConsentDateTime,並將值與 termsOfUseTextUpdateDateTime 的宣告進行比較。 如果接受是舊的,藉由顯示自我聲明的畫面強制使用者接受新的。 否則,請使用原則邏輯封鎖存取。

  5. 藉由比較接受的版本號碼與最近接受的版本號碼,要求接受更新的使用規定。 您只能使用自定義使用者流程來比較版本號碼。 使用 擴充屬性extension_termsOfUseConsentDateTime,並將值與 extension_termsOfUseConsentVersion的宣告進行比較。 如果接受是舊的,藉由顯示自我聲明的畫面強制使用者接受新的。 否則,請使用原則邏輯封鎖存取。

您可以在下列情境中記錄使用規定的接受:

  • 新使用者正在註冊。 會顯示使用規定,並儲存接受結果。
  • 一位已接受最新或有效使用規定的使用者正在登入。 不會顯示使用規定。
  • 尚未接受最新或有效使用規定的使用者正在登入。 會顯示使用規定,並儲存接受結果。
  • 使用者正在登入,其已接受舊版的使用規定,現在已更新為最新版本。 會顯示使用規定,並儲存接受結果。

下圖顯示建議的使用者流程:

顯示建議接受使用者流程的流程圖

以下是聲明中日期為基礎的使用條款同意範例。 如果 extension_termsOfUseConsentDateTime 宣告早於 2025-01-15T00:00:00,則通過檢查termsOfUseConsentRequired布爾值宣告來強制新的接受,並顯示自我聲明的畫面。

<ClaimsTransformations>
  <ClaimsTransformation Id="GetNewUserAgreeToTermsOfUseConsentDateTime" TransformationMethod="GetCurrentDateTime">
    <OutputClaims>
      <OutputClaim ClaimTypeReferenceId="extension_termsOfUseConsentDateTime" TransformationClaimType="currentDateTime" />
    </OutputClaims>
  </ClaimsTransformation>
  <ClaimsTransformation Id="IsTermsOfUseConsentRequired" TransformationMethod="IsTermsOfUseConsentRequired">
    <InputClaims>
      <InputClaim ClaimTypeReferenceId="extension_termsOfUseConsentDateTime" TransformationClaimType="termsOfUseConsentDateTime" />
    </InputClaims>
    <InputParameters>
      <InputParameter Id="termsOfUseTextUpdateDateTime" DataType="dateTime" Value="2025-01-15T00:00:00" />
    </InputParameters>
    <OutputClaims>
      <OutputClaim ClaimTypeReferenceId="termsOfUseConsentRequired" TransformationClaimType="result" />
    </OutputClaims>
  </ClaimsTransformation>
</ClaimsTransformations>

以下是索賠中基於版本的使用條款同意範例。 如果 extension_termsOfUseConsentVersion 宣告不等於 V1,強制要求新的接受,藉由檢查 termsOfUseConsentRequired 布爾值宣告並顯示自我聲稱畫面。

<ClaimsTransformations>
  <ClaimsTransformation Id="GetEmptyTermsOfUseConsentVersionForNewUser" TransformationMethod="CreateStringClaim">
    <InputParameters>
      <InputParameter Id="value" DataType="string" Value=""/>
    </InputParameters>
    <OutputClaims>
      <OutputClaim ClaimTypeReferenceId="extension_termsOfUseConsentVersion" TransformationClaimType="createdClaim" />
    </OutputClaims>
  </ClaimsTransformation>
  <ClaimsTransformation Id="GetNewUserAgreeToTermsOfUseConsentVersion" TransformationMethod="CreateStringClaim">
    <InputParameters>
      <InputParameter Id="value" DataType="string" Value="V1"/>
    </InputParameters>
    <OutputClaims>
      <OutputClaim ClaimTypeReferenceId="extension_termsOfUseConsentVersion" TransformationClaimType="createdClaim" />
    </OutputClaims>
  </ClaimsTransformation>
  <ClaimsTransformation Id="IsTermsOfUseConsentRequiredForVersion" TransformationMethod="CompareClaimToValue">
    <InputClaims>
      <InputClaim ClaimTypeReferenceId="extension_termsOfUseConsentVersion" TransformationClaimType="inputClaim1" />
    </InputClaims>
    <InputParameters>
      <InputParameter Id="compareTo" DataType="string" Value="V1" />
      <InputParameter Id="operator" DataType="string" Value="not equal" />
      <InputParameter Id="ignoreCase" DataType="string" Value="true" />
    </InputParameters>
    <OutputClaims>
      <OutputClaim ClaimTypeReferenceId="termsOfUseConsentRequired" TransformationClaimType="outputClaim" />
    </OutputClaims>
  </ClaimsTransformation>
</ClaimsTransformations>

後續步驟