在 Azure Active Directory B2C 中新增使用者屬性和自訂使用者輸入

開始之前,請使用上面的選取器來選擇您要設定的原則類型。 Azure AD B2C 提供兩種方法來定義使用者與應用程式互動的方式:透過預先定義的 使用者流程,或透過完全可設定的 自訂原則。 這篇文章中所需的步驟對於每個方法都是不同的。

在本文中,您會在 Azure Active Directory B2C (Azure AD B2C) 的註冊旅程期間收集新的屬性。 您將取得使用者的城市、將其設定為下拉式清單,並定義是否需要提供。

重要

此範例會使用內建的宣告「city」。 相反地,您可以選擇其中一個支援的 Azure AD B2C 內建屬性 或自訂屬性。 若要使用自訂屬性,請 啟用自訂屬性。 若要使用不同的內建或自訂屬性,請將 ' city ' 取代為您選擇的屬性,例如內建屬性 jobTitle 或自訂屬性(例如 extension_loyaltyId)。

必要條件

新增使用者流程的使用者屬性

  1. 在 Azure AD B2C 租用戶中,選取 [使用者流程]。
  2. 選取您的原則 (例如「B2C_1_SignupSignin」) 以開啟之。
  3. 選取 [ 使用者屬性 ],然後選取 [使用者屬性] (例如 [城市] ) 。
  4. 選取 [儲存]。

為您的應用程式提供選擇性宣告

應用程式宣告是傳回給應用程式的值。 更新您的使用者流程以包含所需的宣告。

  1. 選取您的原則 (例如「B2C_1_SignupSignin」) 以開啟之。
  2. 選取 [應用程式宣告]。
  3. 選取您要傳回給應用程式的屬性 (例如「City」 ) 。
  4. 選取 [儲存]。

設定使用者屬性輸入類型

  1. 選取您的原則 (例如「B2C_1_SignupSignin」) 以開啟之。
  2. 選取 [ 頁面配置]。
  3. 選取 本機帳戶註冊頁面
  4. 在 [ 使用者屬性] 下,選取 [ 城市]。
    1. 在 [ 使用者輸入類型 ] 下拉式清單中,選取 [ DropdownSingleSelect]。 選擇性:使用 [上移]/[下移] 按鈕,在註冊頁面上排列文字順序。
    2. 選用 的下拉式清單中,選取 [ ]。
  5. 選取 [儲存]。

使用當地語系化的集合提供值清單

若要提供 city 屬性的設定值清單:

  1. 在使用者流程上啟用語言自訂
  2. 選取您的原則 (例如「B2C_1_SignupSignin」) 以開啟之。
  3. 在使用者流程的 [語言] 頁面上,選取您想要自訂的語言。
  4. 在 [ 頁面層級資源] 檔案底下,選取 [ 本機帳戶註冊頁面]。
  5. 選取 [下載預設值] (如果您先前已編輯這個語言,請按一下 [下載覆寫])。
  6. 建立 LocalizedCollections 屬性。

LocalizedCollections是和配對的陣列 Name Value 。 項目的順序即為顯示它們的順序。

  • ElementId 是使用者屬性,而其回應則是這個 LocalizedCollections 屬性。
  • Name 是向使用者顯示的值。
  • Value 是選取此選項時在宣告中所傳回的內容。
{
  "LocalizedStrings": [...],
  "LocalizedCollections": [
    {
      "ElementType": "ClaimType",
      "ElementId": "city",
      "TargetCollection": "Restriction",
      "Override": true,
      "Items": [
        {
          "Name": "Berlin",
          "Value": "Berlin"
        },
        {
          "Name": "London",
          "Value": "London"
        },
        {
          "Name": "Seattle",
          "Value": "Seattle"
        }
      ]
    }
  ]
}

上傳您的變更

  1. 對 JSON 檔案完成變更後,請瀏覽回到 B2C 租用戶。
  2. 選取 [ 使用者流程 ],然後選取您的原則 (例如,[B2C_1_SignupSignin] ) 開啟。
  3. 選取 [語言]。
  4. 選取您想要轉譯成什麼語言。
  5. 選取 本機帳戶註冊頁面
  6. 選取資料夾圖示,然後選取要上傳的 JSON 檔案。 這些變更會自動儲存到您的使用者流程。

測試您的使用者流程

  1. 選取您的原則 (例如「B2C_1_SignupSignin」) 以開啟之。
  2. 若要測試您的原則,請選取 [ 執行使用者流程]。
  3. 針對 [ 應用程式],選取您先前註冊的 web 應用程式(名為 testapp1-pre-production )。 Reply URL 應顯示 https://jwt.ms
  4. 按一下 [執行使用者流程]

概觀

您可以使用註冊或登入使用者旅程圖,從使用者收集初始資料。 其他宣告則可在稍後透過使用設定檔編輯使用者旅程圖來收集。 每當 Azure AD B2C 以互動方式直接從使用者收集資訊時,就會使用 自我判斷技術設定檔。 在此範例中,您會:

  1. 定義「城市」宣告。
  2. 要求使用者提供其城市。
  3. 將城市保存到 Azure AD B2C 目錄中的使用者設定檔。
  4. 在每次登入時讀取 Azure AD B2C 目錄中的 city 宣告。
  5. 登入或註冊之後,請將城市返回您的信賴憑證者應用程式。

定義宣告

宣告會在 Azure AD B2C 原則執行期間,提供資料的暫時儲存。 宣告結構描述是您宣告自有宣告的位置。 下列元素用來定義宣告:

  • DisplayName - 一個字串,會定義使用者端的「標籤」。
  • DataType -宣告的型別。
  • UserHelpText - 可協助使用者了解所需項目。
  • >Userinputtype -輸入控制項的類型,例如文字方塊、選項按鈕、下拉式清單或多重選取專案。

開啟您原則的擴充檔。 例如,SocialAndLocalAccounts/TrustFrameworkExtensions.xml

  1. 搜尋 BuildingBlocks 元素。 如果此元素不存在,請加以新增。
  2. 尋找 ClaimsSchema (機器翻譯) 元素。 如果此元素不存在,請加以新增。
  3. 將 city 宣告加入至 ClaimsSchema 元素。
<!-- 
<BuildingBlocks>
  <ClaimsSchema> -->
    <ClaimType Id="city">
      <DisplayName>City where you work</DisplayName>
      <DataType>string</DataType>
      <UserInputType>DropdownSingleSelect</UserInputType>
      <Restriction>
        <Enumeration Text="Berlin" Value="berlin" />
        <Enumeration Text="London" Value="bondon" />
        <Enumeration Text="Seattle" Value="seattle" />
      </Restriction>
    </ClaimType>
  <!-- 
  </ClaimsSchema>
</BuildingBlocks>-->

在專案上包含 SelectByDefault 屬性 Enumeration ,以在第一次載入頁面時預設選取它。 例如,若要預先選取 倫敦 專案,請變更元素, Enumeration 如下列範例所示:

<Restriction>
  <Enumeration Text="Berlin" Value="berlin" />
  <Enumeration Text="London" Value="bondon" SelectByDefault="true" />
  <Enumeration Text="Seattle" Value="seattle" />
</Restriction>

將宣告新增至使用者介面

下列技術設定檔是 自我判斷的,當使用者預期會提供輸入時,就會叫用這些設定檔:

  • LocalAccountSignUpWithLogonEmail -本機帳戶註冊流程。
  • SelfAsserted-社交 同盟帳戶首次使用者登入。
  • SelfAsserted-selfasserted-profileupdate -編輯設定檔流程。

若要在註冊期間收集城市宣告,必須將其新增為技術設定檔的輸出宣告 LocalAccountSignUpWithLogonEmail 。 覆寫延伸模組檔案中的這個技術設定檔。 指定輸出宣告的完整清單,以控制宣告在螢幕上的顯示順序。 尋找 ClaimsProviders 元素。 新增 Claimsprovider,如下所示:

<ClaimsProvider>
  <DisplayName>Local Account</DisplayName>
  <TechnicalProfiles>
    <!--Local account sign-up page-->
    <TechnicalProfile Id="LocalAccountSignUpWithLogonEmail">
      <OutputClaims>
       <OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="Verified.Email" Required="true" />
       <OutputClaim ClaimTypeReferenceId="newPassword" Required="true" />
       <OutputClaim ClaimTypeReferenceId="reenterPassword" Required="true" />
       <OutputClaim ClaimTypeReferenceId="displayName" />
       <OutputClaim ClaimTypeReferenceId="givenName" />
       <OutputClaim ClaimTypeReferenceId="surName" />
       <OutputClaim ClaimTypeReferenceId="city"/>
     </OutputClaims>
   </TechnicalProfile>
  </TechnicalProfiles>
</ClaimsProvider>

若要在初始以同盟帳戶登入之後收集 city 宣告,必須將其新增為技術設定檔的輸出宣告 SelfAsserted-Social 。 若要讓本機和同盟帳戶使用者稍後能夠編輯其設定檔資料,請將輸入和輸出宣告新增至 SelfAsserted-ProfileUpdate 技術設定檔。 覆寫延伸模組檔案中的這些技術設定檔。 指定輸出宣告的完整清單,以控制宣告在螢幕上的顯示順序。 尋找 ClaimsProviders 元素。 新增 Claimsprovider,如下所示:

<ClaimsProvider>
  <DisplayName>Self Asserted</DisplayName>
  <TechnicalProfiles>
    <!--Federated account first-time sign-in page-->
    <TechnicalProfile Id="SelfAsserted-Social">
      <InputClaims>
        <InputClaim ClaimTypeReferenceId="city" />
      </InputClaims>
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="displayName"/>
        <OutputClaim ClaimTypeReferenceId="givenName"/>
        <OutputClaim ClaimTypeReferenceId="surname"/>
        <OutputClaim ClaimTypeReferenceId="city"/>
      </OutputClaims>
    </TechnicalProfile>
    <!--Edit profile page-->
    <TechnicalProfile Id="SelfAsserted-ProfileUpdate">
      <InputClaims>
        <InputClaim ClaimTypeReferenceId="city" />
      </InputClaims>
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="displayName"/>
        <OutputClaim ClaimTypeReferenceId="givenName" />
        <OutputClaim ClaimTypeReferenceId="surname" />
        <OutputClaim ClaimTypeReferenceId="city"/>
      </OutputClaims>
    </TechnicalProfile>
  </TechnicalProfiles>
</ClaimsProvider>

讀取和寫入宣告

下列技術設定檔是 Active Directory 的技術設定檔,可讀取和寫入 Azure Active Directory 的資料。
PersistedClaims 來將資料寫入使用者設定檔,以及 OutputClaims 從個別 Active Directory 技術設定檔內的使用者設定檔讀取資料。

覆寫延伸模組檔案中的這些技術設定檔。 尋找 ClaimsProviders 元素。 新增 Claimsprovider,如下所示:

<ClaimsProvider>
  <DisplayName>Azure Active Directory</DisplayName>
  <TechnicalProfiles>
    <!-- Write data during a local account sign-up flow. -->
    <TechnicalProfile Id="AAD-UserWriteUsingLogonEmail">
      <PersistedClaims>
        <PersistedClaim ClaimTypeReferenceId="city"/>
      </PersistedClaims>
    </TechnicalProfile>
    <!-- Write data during a federated account first-time sign-in flow. -->
    <TechnicalProfile Id="AAD-UserWriteUsingAlternativeSecurityId">
      <PersistedClaims>
        <PersistedClaim ClaimTypeReferenceId="city"/>
      </PersistedClaims>
    </TechnicalProfile>
    <!-- Write data during edit profile flow. -->
    <TechnicalProfile Id="AAD-UserWriteProfileUsingObjectId">
      <PersistedClaims>
        <PersistedClaim ClaimTypeReferenceId="city"/>
      </PersistedClaims>
    </TechnicalProfile>
    <!-- Read data after user resets the password. -->
    <TechnicalProfile Id="AAD-UserReadUsingEmailAddress">
      <OutputClaims>  
        <OutputClaim ClaimTypeReferenceId="city" />
      </OutputClaims>
    </TechnicalProfile>
    <!-- Read data after user authenticates with a local account. -->
    <TechnicalProfile Id="AAD-UserReadUsingObjectId">
      <OutputClaims>  
        <OutputClaim ClaimTypeReferenceId="city" />
      </OutputClaims>
    </TechnicalProfile>
    <!-- Read data after user authenticates with a federated account. -->
    <TechnicalProfile Id="AAD-UserReadUsingAlternativeSecurityId">
      <OutputClaims>  
        <OutputClaim ClaimTypeReferenceId="city" />
      </OutputClaims>
    </TechnicalProfile>
  </TechnicalProfiles>
</ClaimsProvider>

在權杖中包含宣告

若要將 city 索取傳回給信賴憑證者應用程式,請將輸出宣告新增至檔案 SocialAndLocalAccounts/SignUpOrSignIn.xml 。 在使用者旅程圖成功後,將會將輸出宣告新增至權杖,並且將會傳送至應用程式。 修改 [信賴憑證者] 區段內的技術設定檔元素,以新增城市作為輸出宣告。

<RelyingParty>
  <DefaultUserJourney ReferenceId="SignUpOrSignIn" />
  <TechnicalProfile Id="PolicyProfile">
    <DisplayName>PolicyProfile</DisplayName>
    <Protocol Name="OpenIdConnect" />
    <OutputClaims>
      <OutputClaim ClaimTypeReferenceId="displayName" />
      <OutputClaim ClaimTypeReferenceId="givenName" />
      <OutputClaim ClaimTypeReferenceId="surname" />
      <OutputClaim ClaimTypeReferenceId="email" />
      <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub"/>
      <OutputClaim ClaimTypeReferenceId="identityProvider" />
      <OutputClaim ClaimTypeReferenceId="tenantId" AlwaysUseDefaultValue="true" DefaultValue="{Policy:TenantObjectId}" />
      <OutputClaim ClaimTypeReferenceId="city" DefaultValue="" />
    </OutputClaims>
    <SubjectNamingInfo ClaimType="sub" />
  </TechnicalProfile>
</RelyingParty>

上傳並測試更新的自訂原則

  1. 選取頂端功能表中的 [目錄 + 訂用帳戶] 篩選,然後選擇包含您租用戶的目錄,以確定您使用的是包含 Azure AD B2C 租用戶的目錄。
  2. 搜尋並選取 [Azure AD B2C]。
  3. 在 [原則] 之下,選取 [Identity Experience Framework]。
  4. 選取 [上傳自訂原則]。
  5. 上傳您先前變更的原則檔。

測試自訂原則

  1. 例如,請選取您的信賴憑證者原則 B2C_1A_signup_signin
  2. 針對 [ 應用程式],選取您 先前註冊的 web 應用程式。 Reply URL 應顯示 https://jwt.ms
  3. 選取 [ 立即執行 ] 按鈕。
  4. 從註冊或登入頁面選取 [ 立即註冊 ] 以註冊。 完成輸入使用者資訊(包括城市名稱),然後按一下 [ 建立]。 您應該會看到傳回的權杖內容。

註冊畫面看起來應該類似下列螢幕擷取畫面:

修改過的註冊選項螢幕擷取畫面

傳送回您的應用程式的權杖包含 city 宣告。

{
  "typ": "JWT",
  "alg": "RS256",
  "kid": "X5eXk4xyojNFum1kl2Ytv8dlNP4-c57dO6QGTVBwaNk"
}.{
  "exp": 1583500140,
  "nbf": 1583496540,
  "ver": "1.0",
  "iss": "https://contoso.b2clogin.com/f06c2fe8-709f-4030-85dc-38a4bfd9e82d/v2.0/",
  "aud": "e1d2612f-c2bc-4599-8e7b-d874eaca1ee1",
  "acr": "b2c_1a_signup_signin",
  "nonce": "defaultNonce",
  "iat": 1583496540,
  "auth_time": 1583496540,
  "name": "Emily Smith",
  "email": "joe@outlook.com",
  "given_name": "Emily",
  "family_name": "Smith",
  "city": "Berlin"
  ...
}

參數將 UI 當地語系化

Azure AD B2C 可讓您將原則納入不同的語言。 如需詳細資訊,請 瞭解自訂語言體驗。 若要將註冊頁面當地語系化,請 設定支援語言的清單,並 提供語言特定標籤

注意

使用 LocalizedCollection 與特定語言的標籤時,您可以 Restriction 從宣告 定義中移除集合。

下列範例示範如何提供英文和西班牙文的城市清單。 這兩個專案都是以 Restriction 英文和西班牙文的專案清單來設定宣告 城市 的集合。 當頁面第一次載入時, SelectByDefault 會建立預設選取的專案。

<!-- 
<BuildingBlocks>-->
  <Localization Enabled="true">
    <SupportedLanguages DefaultLanguage="en" MergeBehavior="Append">
      <SupportedLanguage>en</SupportedLanguage>
      <SupportedLanguage>es</SupportedLanguage>
    </SupportedLanguages>
    <LocalizedResources Id="api.localaccountsignup.en">
      <LocalizedCollections>
        <LocalizedCollection ElementType="ClaimType" ElementId="city" TargetCollection="Restriction">
          <Item Text="Berlin" Value="Berlin"></Item>
          <Item Text="London" Value="London" SelectByDefault="true"></Item>
          <Item Text="Seattle" Value="Seattle"></Item>
        </LocalizedCollection>
      </LocalizedCollections>
    </LocalizedResources>
    <LocalizedResources Id="api.localaccountsignup.es">
      <LocalizedCollections>
        <LocalizedCollection ElementType="ClaimType" ElementId="city" TargetCollection="Restriction">
          <Item Text="Berlina" Value="Berlin"></Item>
          <Item Text="Londres" Value="London" SelectByDefault="true"></Item>
          <Item Text="Seattle" Value="Seattle"></Item>
        </LocalizedCollection>
      </LocalizedCollections>
    </LocalizedResources>
  </Localization>
<!-- 
</BuildingBlocks>-->

新增當地語系化專案之後,請 使用當地語系化編輯內容定義。 在下列範例中,英文 (en) 和西班牙文 (es) 自訂當地語系化資源會新增至註冊頁面:

<!-- 
<BuildingBlocks>
  <ContentDefinitions> -->
   <ContentDefinition Id="api.localaccountsignup">
    <LocalizedResourcesReferences MergeBehavior="Prepend">
        <LocalizedResourcesReference Language="en" LocalizedResourcesReferenceId="api.localaccountsignup.en" />
        <LocalizedResourcesReference Language="es" LocalizedResourcesReferenceId="api.localaccountsignup.es" />
    </LocalizedResourcesReferences>
   </ContentDefinition>
  <!-- 
  </ContentDefinitions>
</BuildingBlocks>-->

下一步