Lägga till användarattribut och anpassa användarindata i Azure Active Directory B2C

Innan du börjar använder du väljaren Välj en principtyp för att välja den typ av princip som du konfigurerar. Azure Active Directory B2C erbjuder två metoder för att definiera hur användare interagerar med dina program: via fördefinierade användarflöden eller genom fullständigt konfigurerbara anpassade principer. De steg som krävs i den här artikeln skiljer sig åt för varje metod.

I den här artikeln samlar du in ett nytt attribut under registreringsresan i Azure Active Directory B2C (Azure AD B2C). Du hämtar användarnas stad, konfigurerar den som en listruta och definierar om den måste anges.

Viktigt!

Det här exemplet använder det inbyggda anspråket "stad". I stället kan du välja ett av de inbyggda Azure AD B2C-attributen som stöds eller ett anpassat attribut. Om du vill använda ett anpassat attribut aktiverar du anpassade attribut. Om du vill använda ett annat inbyggt eller anpassat attribut ersätter du "city" med det attribut du väljer, till exempel det inbyggda attributjobbetTitle eller ett anpassat attribut som extension_loyaltyId.

Förutsättningar

Lägg till användarattribut i användarflödet

  1. Logga in på Azure-portalen.
  2. Om du har åtkomst till flera klienter väljer du ikonen Inställningar på den översta menyn för att växla till din Azure AD B2C-klient från menyn Kataloger + prenumerationer.
  3. Under Azure-tjänster väljer du Azure AD B2C. Eller använd sökrutan för att hitta och välja Azure AD B2C.
  4. I din Azure AD B2C-klient väljer du Användarflöden.
  5. Välj din princip (till exempel "B2C_1_SignupSignin") för att öppna den.
  6. Välj Användarattribut och välj sedan användarattributet (till exempel "Stad").
  7. Välj Spara.

Ange valfria anspråk till din app

Programanspråken är värden som returneras till programmet. Uppdatera användarflödet så att det innehåller önskade anspråk.

  1. Välj din princip (till exempel "B2C_1_SignupSignin") för att öppna den.
  2. Välj Programanspråk.
  3. Välj attribut som du vill skicka tillbaka till ditt program (till exempel "Stad")..
  4. Välj Spara.

Konfigurera indatatyp för användarattribut

  1. Välj din princip (till exempel "B2C_1_SignupSignin") för att öppna den.

  2. Välj Sidlayouter.

  3. Välj registreringssidan för lokalt konto.

  4. Under Användarattribut väljer du Stad.

    1. I listrutan Valfritt väljer du Nej.
    2. I indatatypen Användare väljer du den aktuella användarens indatatyp, till exempel Textruta, för att öppna fönstret Användarindatatypredigerare.
    3. I listrutan Användarindatatyp väljer du ListrutaVälj.
    4. I Text och Värden anger du de text- och värdepar som utgör din uppsättning svar för attributet. Texten visas i webbgränssnittet för ditt flöde och Värdena lagras i Azure AD B2C för vald text. Valfritt: Använd knapparna "Flytta upp/ned" för att ordna om listruteobjekt.
  5. Välj OK. Valfritt: Använd knapparna "Flytta upp/ned" för att ordna om användarattribut på registreringssidan.

  6. Välj Spara.

    Web page call green API.

Ange en lista med värden med hjälp av lokaliserade samlingar

Så här anger du en uppsättning värden för stadsattributet:

  1. Aktivera språkanpassning i användarflödet
  2. Välj din princip (till exempel "B2C_1_SignupSignin") för att öppna den.
  3. På sidan Språk för användarflödet väljer du det språk som du vill anpassa.
  4. Under Resursfiler på sidnivå väljer du Sidan För registrering av lokalt konto.
  5. Välj Hämta standardvärden (eller Ladda ned åsidosättningar om du tidigare har redigerat det här språket).
  6. Skapa ett LocalizedCollections attribut.

LocalizedCollections är en matris med Name och Value par. Ordningen för objekten är den ordning som de visas.

  • ElementId är det användarattribut som det här LocalizedCollections attributet är ett svar på.
  • Name är det värde som visas för användaren.
  • Value är vad som returneras i anspråket när det här alternativet väljs.
{
  "LocalizedStrings": [...],
  "LocalizedCollections": [
    {
      "ElementType": "ClaimType",
      "ElementId": "city",
      "TargetCollection": "Restriction",
      "Override": true,
      "Items": [
        {
          "Name": "Berlin",
          "Value": "Berlin"
        },
        {
          "Name": "London",
          "Value": "London"
        },
        {
          "Name": "Seattle",
          "Value": "Seattle"
        }
      ]
    }
  ]
}

Ladda upp dina ändringar

  1. När du har slutfört ändringarna i JSON-filen går du tillbaka till din B2C-klientorganisation.
  2. Välj Användarflöden och välj din princip (till exempel "B2C_1_SignupSignin") för att öppna den.
  3. Välj Språk.
  4. Välj det språk som du vill översätta till.
  5. Under Filer på sidnivåresurser väljer du Sidan För registrering av lokalt konto.
  6. Välj mappikonen och välj den JSON-fil som ska laddas upp. Ändringarna sparas automatiskt i användarflödet.

Testa användarflödet

  1. Välj din princip (till exempel "B2C_1_SignupSignin") för att öppna den.
  2. Om du vill testa principen väljer du Kör användarflöde.
  3. För Program väljer du webbprogrammet med namnet testapp1 som du registrerade tidigare. Svars-URL :en ska visa https://jwt.ms.
  4. Klicka på Kör användarflöde

Översikt

Du kan samla in initiala data från dina användare med hjälp av registrerings- eller inloggningsanvändarresan. Ytterligare anspråk kan samlas in senare med hjälp av en användarresa för profilredigering. När Azure AD B2C samlar in information direkt från användaren interaktivt använder den den självsäkra tekniska profilen. I det här exemplet gör du följande:

  1. Definiera ett "stad"-anspråk.
  2. Be användaren om deras stad.
  3. Spara staden till användarprofilen i Azure AD B2C-katalogen.
  4. Läs stadens anspråk från Azure AD B2C-katalogen vid varje inloggning.
  5. Returnera staden till ditt förlitande partprogram efter inloggning eller registrering.

Definiera ett anspråk

Ett anspråk ger en tillfällig lagring av data under en Azure AD B2C-principkörning. Anspråksschemat är den plats där du deklarerar dina anspråk. Följande element används för att definiera anspråket:

  • DisplayName – en sträng som definierar den användarriktade etiketten.
  • DataType – typen av anspråk.
  • UserHelpText – hjälper användaren att förstå vad som krävs.
  • UserInputType – typ av indatakontroll, till exempel textruta, alternativval, listruta eller flera val.

Öppna tilläggsfilen för principen. Exempel: SocialAndLocalAccounts/TrustFrameworkExtensions.xml

  1. Sök efter elementet BuildingBlocks . Om elementet inte finns lägger du till det.
  2. Leta upp elementet ClaimsSchema . Om elementet inte finns lägger du till det.
  3. Lägg till stadsanspråket i elementet 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>-->

Inkludera attributet SelectByDefault i ett Enumeration element för att göra det markerat som standard när sidan läses in först. Om du till exempel vill välja London-objektet i förväg ändrar du elementet Enumeration som följande exempel:

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

Lägga till ett anspråk i användargränssnittet

Följande tekniska profiler är självsäkra och anropas när en användare förväntas ange indata:

  • LocalAccountSignUpWithLogonEmail – Registreringsflöde för lokalt konto.
  • SelfAsserted-Social – Federerat konto första gången användaren loggar in.
  • SelfAsserted-ProfileUpdate – Redigera profilflöde.

För att samla in stadsanspråket under registreringen måste det läggas till som ett utdataanspråk i den LocalAccountSignUpWithLogonEmail tekniska profilen. Åsidosätt den här tekniska profilen i tilläggsfilen. Ange hela listan med utdataanspråk för att styra ordningen som anspråken visas på skärmen. Hitta elementet ClaimsProviders . Lägg till en ny ClaimsProviders på följande sätt:

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

Om du vill samla in stadens anspråk efter den första inloggningen med ett federerat konto måste det läggas till som ett utdataanspråk i den SelfAsserted-Social tekniska profilen. För att lokala och federerade kontoanvändare ska kunna redigera sina profildata senare lägger du till indata- och utdataanspråken i den SelfAsserted-ProfileUpdate tekniska profilen. Åsidosätt dessa tekniska profiler i tilläggsfilen. Ange hela listan över utdataanspråk för att kontrollera vilken ordning anspråken visas på skärmen. Hitta elementet ClaimsProviders . Lägg till en ny ClaimsProviders på följande sätt:

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

Läsa och skriva ett anspråk

Följande tekniska profiler är Active Directory-tekniska profiler som läser och skriver data till Microsoft Entra-ID.
Använd PersistedClaims för att skriva data till användarprofilen och OutputClaims för att läsa data från användarprofilen inom respektive Active Directory-tekniska profiler.

Åsidosätt dessa tekniska profiler i tilläggsfilen. Hitta elementet ClaimsProviders . Lägg till en ny ClaimsProviders på följande sätt:

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

Inkludera ett anspråk i token

Om du vill returnera stadsanspråket tillbaka till det förlitande partprogrammet lägger du till ett utdataanspråk i SocialAndLocalAccounts/SignUpOrSignIn.xml filen. Utdataanspråket läggs till i token efter en lyckad användarresa och skickas till programmet. Ändra det tekniska profilelementet i avsnittet förlitande part för att lägga till staden som ett utdataanspråk.

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

Ladda upp och testa din uppdaterade anpassade princip

  1. Om du har åtkomst till flera klienter väljer du ikonen Inställningar på den översta menyn för att växla till din Azure AD B2C-klient från menyn Kataloger + prenumerationer.
  2. Sök efter och markera Azure AD B2C.
  3. Under Principer väljer du Identity Experience Framework.
  4. Välj Överför anpassad princip.
  5. Ladda upp de principfiler som du tidigare har ändrat.

Testa den anpassade principen

  1. Välj din princip för förlitande part, till exempel B2C_1A_signup_signin.
  2. För Program väljer du ett webbprogram som du registrerade tidigare. Svars-URL :en ska visa https://jwt.ms.
  3. Välj knappen Kör nu.
  4. På registrerings- eller inloggningssidan väljer du Registrera dig nu för att registrera dig. Slutför att ange användarinformationen, inklusive ortens namn, och klicka sedan på Skapa. Du bör se innehållet i token som returnerades.

Registreringsskärmen bör se ut ungefär så här:

Screenshot of modified sign-up option

Token som skickas tillbaka till ditt program innehåller anspråket 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"
  ...
}

[Valfritt] Lokalisera användargränssnittet

Med Azure AD B2C kan du anpassa principen till olika språk. Mer information finns i anpassa språkupplevelsen. Om du vill lokalisera registreringssidan konfigurerar du listan över språk som stöds och tillhandahåller språkspecifika etiketter.

Kommentar

När du använder LocalizedCollection med språkspecifika etiketter kan du ta bort Restriction samlingen från anspråksdefinitionen.

I följande exempel visas hur du anger en lista över städer för engelska och spanska. Båda ställer in Restriction samlingen av anspråksstadenmed en lista över objekt för engelska och spanska. SelectByDefault gör ett objekt markerat som standard när sidan läses in.

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

När du har lagt till lokaliseringselementet redigerar du innehållsdefinitionen med lokaliseringen. I följande exempel läggs anpassade lokaliserade resurser på engelska (en) och spanska (es) till på registreringssidan:

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

Nästa steg