Dodawanie atrybutów użytkownika i dostosowywanie danych wejściowych użytkownika w usłudze Azure Active Directory B2C

Przed rozpoczęciem użyj selektora Wybierz typ zasad, aby wybrać typ konfigurowanych zasad. Usługa Azure Active Directory B2C oferuje dwie metody definiowania sposobu interakcji użytkowników z aplikacjami: za pomocą wstępnie zdefiniowanych przepływów użytkowników lub w pełni konfigurowalnych zasad niestandardowych. Kroki wymagane w tym artykule są różne dla każdej metody.

W tym artykule zbierzesz nowy atrybut podczas podróży do rejestracji w usłudze Azure Active Directory B2C (Azure AD B2C). Uzyskasz miasto użytkowników, skonfigurujesz je jako listę rozwijaną i określisz, czy jest to wymagane do podania.

Ważne

W tym przykładzie użyto wbudowanego oświadczenia "city". Zamiast tego możesz wybrać jeden z obsługiwanych wbudowanych atrybutów usługi Azure AD B2C lub atrybutu niestandardowego. Aby użyć atrybutu niestandardowego, włącz atrybuty niestandardowe. Aby użyć innego wbudowanego lub niestandardowego atrybutu, zastąp wartość "city" wybranym atrybutem, na przykład wbudowanym atrybutem JobTitle lub atrybutem niestandardowym, na przykład extension_loyaltyId.

Wymagania wstępne

Dodawanie atrybutów użytkownika przepływu użytkownika

  1. Zaloguj się w witrynie Azure Portal.
  2. Jeśli masz dostęp do wielu dzierżaw, wybierz ikonę Ustawienia w górnym menu, aby przełączyć się do dzierżawy usługi Azure AD B2C z menu Katalogi i subskrypcje.
  3. W obszarze Usługi platformy Azure wybierz pozycję Azure AD B2C. Możesz też użyć pola wyszukiwania, aby znaleźć i wybrać usługę Azure AD B2C.
  4. W dzierżawie usługi Azure AD B2C wybierz pozycję Przepływy użytkownika.
  5. Wybierz zasady (na przykład "B2C_1_SignupSignin"), aby je otworzyć.
  6. Wybierz pozycję Atrybuty użytkownika, a następnie wybierz atrybut użytkownika (na przykład "Miasto").
  7. Wybierz pozycję Zapisz.

Podaj opcjonalne oświadczenia do aplikacji

Oświadczenia aplikacji to wartości zwracane do aplikacji. Zaktualizuj przepływ użytkownika, aby zawierał żądane oświadczenia.

  1. Wybierz zasady (na przykład "B2C_1_SignupSignin"), aby je otworzyć.
  2. Wybierz pozycję Oświadczenia aplikacji.
  3. Wybierz atrybuty, które chcesz wysłać z powrotem do aplikacji (na przykład "Miasto")..
  4. Wybierz pozycję Zapisz.

Konfigurowanie typu danych wejściowych atrybutów użytkownika

  1. Wybierz zasady (na przykład "B2C_1_SignupSignin"), aby je otworzyć.

  2. Wybierz pozycję Układy stron.

  3. Wybierz pozycję Strona rejestracji konta lokalnego.

  4. W obszarze Atrybuty użytkownika wybierz pozycję Miasto.

    1. Z listy rozwijanej Opcjonalne wybierz pozycję Nie.
    2. W polu Typ danych wejściowych użytkownika wybierz bieżący typ danych wejściowych użytkownika, taki jak TextBox, aby otworzyć okienko Edytor typów danych wejściowych użytkownika.
    3. Z listy rozwijanej Typ danych wejściowych użytkownika wybierz pozycję Listy rozwijaneSingleWybierz.
    4. W polach Tekst i Wartości wprowadź pary tekstowe i wartości, które składają się na zestaw odpowiedzi dla atrybutu. Tekst jest wyświetlany w interfejsie internetowym dla przepływu, a wartości są przechowywane w usłudze Azure AD B2C dla wybranego tekstu. Opcjonalnie: użyj przycisków "Przenieś w górę/w dół", aby zmienić kolejność elementów rozwijanych.
  5. Wybierz OK Opcjonalnie: użyj przycisków "Przenieś w górę/w dół", aby zmienić kolejność atrybutów użytkownika na stronie rejestracji.

  6. Wybierz pozycję Zapisz.

    Web page call green API.

Podaj listę wartości przy użyciu zlokalizowanych kolekcji

Aby podać listę zestawów wartości atrybutu miasta:

  1. Włączanie dostosowywania języka w przepływie użytkownika
  2. Wybierz zasady (na przykład "B2C_1_SignupSignin"), aby je otworzyć.
  3. Na stronie Języki przepływu użytkownika wybierz język, który chcesz dostosować.
  4. W obszarze Pliki zasobów na poziomie strony wybierz pozycję Strona rejestracji konta lokalnego.
  5. Wybierz pozycję Pobierz wartości domyślne (lub Pobierz przesłonięcia , jeśli wcześniej edytowano ten język).
  6. Utwórz LocalizedCollections atrybut.

Jest LocalizedCollections to tablica Name par i Value . Kolejność elementów będzie kolejnością ich wyświetlania.

  • ElementId jest atrybutem użytkownika, do którego ten LocalizedCollections atrybut jest odpowiedzią.
  • Name to wartość wyświetlana użytkownikowi.
  • Value to, co jest zwracane w oświadczeniu po wybraniu tej opcji.
{
  "LocalizedStrings": [...],
  "LocalizedCollections": [
    {
      "ElementType": "ClaimType",
      "ElementId": "city",
      "TargetCollection": "Restriction",
      "Override": true,
      "Items": [
        {
          "Name": "Berlin",
          "Value": "Berlin"
        },
        {
          "Name": "London",
          "Value": "London"
        },
        {
          "Name": "Seattle",
          "Value": "Seattle"
        }
      ]
    }
  ]
}

Przekazywanie zmian

  1. Po zakończeniu zmian w pliku JSON wróć do dzierżawy usługi B2C.
  2. Wybierz pozycję Przepływy użytkownika i wybierz zasady (na przykład "B2C_1_SignupSignin"), aby je otworzyć.
  3. Wybierz pozycję Języki.
  4. Wybierz język, na który chcesz przetłumaczyć.
  5. W obszarze Pliki zasobów na poziomie strony wybierz pozycję Strona rejestracji konta lokalnego.
  6. Wybierz ikonę folderu i wybierz plik JSON do przekazania. Zmiany są zapisywane automatycznie w przepływie użytkownika.

Testowanie przepływu użytkownika

  1. Wybierz zasady (na przykład "B2C_1_SignupSignin"), aby je otworzyć.
  2. Aby przetestować zasady, wybierz pozycję Uruchom przepływ użytkownika.
  3. W polu Aplikacja wybierz aplikację internetową o nazwie testapp1 , która została wcześniej zarejestrowana. Adres URL odpowiedzi powinien zawierać wartość https://jwt.ms.
  4. Kliknij pozycję Uruchom przepływ użytkownika

Omówienie

Możesz zebrać początkowe dane od użytkowników, korzystając z podróży użytkownika rejestracji lub logowania. Dodatkowe oświadczenia można zebrać później przy użyciu podróży użytkownika do edycji profilu. Za każdym razem, gdy usługa Azure AD B2C zbiera informacje bezpośrednio od użytkownika, korzysta z własnego profilu technicznego. W tym przykładzie wykonasz następujące elementy:

  1. Zdefiniuj oświadczenie "miasto".
  2. Poproś użytkownika o swoje miasto.
  3. Utrwalij miasto w profilu użytkownika w katalogu usługi Azure AD B2C.
  4. Przeczytaj oświadczenie miasta z katalogu usługi Azure AD B2C przy każdym logowaniu.
  5. Po zalogowaniu lub rejestracji wróć do aplikacji jednostki uzależnionej.

Definiowanie oświadczenia

Oświadczenie zapewnia tymczasowy magazyn danych podczas wykonywania zasad usługi Azure AD B2C. Schemat oświadczeń to miejsce, w którym zadeklarowane są oświadczenia. Do zdefiniowania oświadczenia służą następujące elementy:

  • DisplayName — ciąg definiujący etykietę skierowaną do użytkownika.
  • DataType — typ oświadczenia.
  • UserHelpText — pomaga użytkownikowi zrozumieć, co jest wymagane.
  • UserInputType — typ kontrolki wprowadzania, na przykład pole tekstowe, wybór radiowy, lista rozwijana lub wiele zaznaczeń.

Otwórz plik rozszerzeń zasad. Na przykład SocialAndLocalAccounts/TrustFrameworkExtensions.xml.

  1. Wyszukaj element BuildingBlocks. Jeśli element nie istnieje, dodaj go.
  2. Znajdź element ClaimsSchema . Jeśli element nie istnieje, dodaj go.
  3. Dodaj oświadczenie miasta do elementu 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="london" />
        <Enumeration Text="Seattle" Value="seattle" />
      </Restriction>
    </ClaimType>
  <!-- 
  </ClaimsSchema>
</BuildingBlocks>-->

Dołącz atrybut SelectByDefault do Enumeration elementu, aby ustawić go domyślnie po pierwszym załadowaniu strony. Aby na przykład wstępnie wybrać element w Londynie , zmień Enumeration element w następujący przykład:

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

Dodawanie oświadczenia do interfejsu użytkownika

Następujące profile techniczne są self-asserted, wywoływane, gdy użytkownik ma dostarczyć dane wejściowe:

  • LocalAccountSignUpWithLogonEmail — przepływ rejestracji konta lokalnego.
  • SelfAsserted-Social — konto federacyjne podczas pierwszego logowania użytkownika.
  • SelfAsserted-ProfileUpdate — edytowanie przepływu profilu.

Aby zebrać wniosek miasta podczas rejestracji, należy go dodać jako oświadczenie wyjściowe do profilu technicznego LocalAccountSignUpWithLogonEmail . Zastąpi ten profil techniczny w pliku rozszerzenia. Określ całą listę oświadczeń wyjściowych, aby kontrolować kolejność prezentowania oświadczeń na ekranie. Znajdź element ClaimsProviders. Dodaj nowy element ClaimsProviders w następujący sposób:

<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>

Aby zebrać oświadczenie miasta po początkowym zalogowaniu się przy użyciu konta federacyjnego, należy dodać je jako oświadczenie wyjściowe do profilu technicznego SelfAsserted-Social . Aby użytkownicy kont lokalnych i federacyjnych mogli później edytować swoje dane profilu, dodaj oświadczenia wejściowe i wyjściowe do profilu technicznego SelfAsserted-ProfileUpdate . Zastąpij te profile techniczne w pliku rozszerzenia. Określ całą listę oświadczeń wyjściowych, aby kontrolować kolejność prezentowania oświadczeń na ekranie. Znajdź element ClaimsProviders. Dodaj nowy element ClaimsProviders w następujący sposób:

<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>

Odczytywanie i zapisywanie oświadczenia

Poniższe profile techniczne to profile techniczne usługi Active Directory, które odczytują i zapisują dane w identyfikatorze Entra firmy Microsoft.
Służy PersistedClaims do zapisywania danych w profilu użytkownika i OutputClaims odczytywania danych z profilu użytkownika w odpowiednich profilach technicznych usługi Active Directory.

Zastąpij te profile techniczne w pliku rozszerzenia. Znajdź element ClaimsProviders. Dodaj nowy element ClaimsProviders w następujący sposób:

<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>

Dołączanie oświadczenia do tokenu

Aby zwrócić oświadczenie miasta z powrotem do aplikacji jednostki uzależnionej, dodaj oświadczenie wyjściowe do SocialAndLocalAccounts/SignUpOrSignIn.xml pliku. Oświadczenie wyjściowe zostanie dodane do tokenu po pomyślnej podróży użytkownika i zostanie wysłane do aplikacji. Zmodyfikuj element profilu technicznego w sekcji jednostki uzależnionej, aby dodać miasto jako oświadczenie wyjściowe.

<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>

Przekazywanie i testowanie zaktualizowanych zasad niestandardowych

  1. Jeśli masz dostęp do wielu dzierżaw, wybierz ikonę Ustawienia w górnym menu, aby przełączyć się do dzierżawy usługi Azure AD B2C z menu Katalogi i subskrypcje.
  2. Wyszukaj i wybierz Azure AD B2C.
  3. W obszarze Zasady wybierz pozycję Identity Experience Framework.
  4. Wybierz pozycję Przekaż zasady niestandardowe.
  5. Przekaż wcześniej zmienione pliki zasad.

Testowanie zasad niestandardowych

  1. Wybierz zasady jednostki uzależnionej, na przykład B2C_1A_signup_signin.
  2. W polu Aplikacja wybierz wcześniej zarejestrowaną aplikację internetową. Adres URL odpowiedzi powinien zawierać wartość https://jwt.ms.
  3. Wybierz przycisk Uruchom teraz.
  4. Na stronie rejestracji lub logowania wybierz pozycję Zarejestruj się teraz , aby się zarejestrować. Zakończ wprowadzanie informacji o użytkowniku, w tym nazwę miasta, a następnie kliknij przycisk Utwórz. Powinna zostać wyświetlona zawartość zwróconego tokenu.

Ekran rejestracji powinien wyglądać podobnie do poniższego zrzutu ekranu:

Screenshot of modified sign-up option

Token wysłany z powrotem do aplikacji zawiera city oświadczenie.

{
  "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"
  ...
}

[Opcjonalnie] Lokalizowanie interfejsu użytkownika

Usługa Azure AD B2C umożliwia dostosowanie zasad do różnych języków. Aby uzyskać więcej informacji, dowiedz się więcej na temat dostosowywania środowiska językowego. Aby zlokalizować stronę rejestracji, skonfiguruj listę obsługiwanych języków i podaj etykiety specyficzne dla języka.

Uwaga

W przypadku używania LocalizedCollection z etykietami specyficznymi dla języka można usunąć Restriction kolekcję z definicji oświadczenia.

W poniższym przykładzie pokazano, jak podać listę miast dla języka angielskiego i hiszpańskiego. Obie ustawiają Restriction kolekcję miasta oświadczeń z listą elementów dla języka angielskiego i hiszpańskiego. Funkcja SelectByDefault domyślnie wybiera element po pierwszym załadowaniu strony.

<!-- 
<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>-->

Po dodaniu elementu lokalizacji zmodyfikuj definicję zawartości przy użyciu lokalizacji. W poniższym przykładzie niestandardowe zasoby zlokalizowane w języku angielskim (en) i hiszpańskim (es) są dodawane do strony rejestracji:

<!-- 
<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>-->

Następne kroki