Delen via


Eindpunt voor gebruikersinfo

Voordat u begint, gebruikt u de selector Een beleidstype kiezen boven aan deze pagina om het type beleid te kiezen dat u instelt. U kunt in Azure Active Directory B2C op twee manieren definiëren hoe gebruikers met uw toepassingen communiceren: via vooraf gedefinieerde gebruikersstromen of via volledig configureerbaar aangepast beleid. De stappen die in dit artikel zijn vereist, verschillen voor elke methode.

Het Eindpunt UserInfo maakt deel uit van de Specificatie openID Verbinding maken standaardspecificatie (OIDC) en is ontworpen om claims over de geverifieerde gebruiker te retourneren. Het eindpunt UserInfo wordt gedefinieerd in het relying party-beleid met behulp van het EndPoint-element .

Deze functie is alleen beschikbaar voor aangepast beleid. Voor configuratiestappen selecteert u Aangepast beleid in de voorgaande selector.

Vereisten

Overzicht van eindpunten voor UserInfo

De gebruikersgegevens UserJourney specificeert:

  • Autorisatie: Het UserInfo-eindpunt wordt beveiligd met een Bearer-token. Er wordt een uitgegeven toegangstoken weergegeven in de autorisatieheader voor het eindpunt UserInfo. Het beleid geeft het technische profiel op waarmee het binnenkomende token wordt gevalideerd en claims worden geëxtraheerd, zoals de object-id van de gebruiker. De object-id van de gebruiker wordt gebruikt om de claims op te halen die moeten worden geretourneerd in het antwoord van het eindpunt van UserInfo.
  • Indelingsstap:
    • Er wordt een indelingsstap gebruikt om informatie over de gebruiker te verzamelen. Op basis van de claims binnen het binnenkomende toegangstoken roept de gebruiker een technisch profiel van Microsoft Entra ID aan om gegevens over de gebruiker op te halen, bijvoorbeeld door de object-id van de gebruiker te lezen.
    • Optionele indelingsstappen : u kunt meer indelingsstappen toevoegen, zoals een technisch REST API-profiel om meer informatie over de gebruiker op te halen.
    • UserInfo Issuer - Hiermee geeft u de lijst met claims op die het UserInfo-eindpunt retourneert.

Een UserInfo-eindpunt maken

1. Het technische profiel van de tokenverlener toevoegen

  1. Open het bestand TrustframeworkExtensions.xml.

  2. Als dit nog niet bestaat, voegt u een ClaimProvider-element en de onderliggende elementen toe als het eerste element onder het element BuildingBlocks.

  3. Voeg de volgende claimprovider toe:

    <!-- 
    <ClaimsProviders> -->
      <ClaimsProvider>
        <DisplayName>Token Issuer</DisplayName>
        <TechnicalProfiles>
          <TechnicalProfile Id="UserInfoIssuer">
            <DisplayName>JSON Issuer</DisplayName>
            <Protocol Name="None" />
            <OutputTokenFormat>JSON</OutputTokenFormat>
            <CryptographicKeys>
              <Key Id="issuer_secret" StorageReferenceId="B2C_1A_TokenSigningKeyContainer" />
            </CryptographicKeys>
            <!-- The Below claims are what will be returned on the UserInfo Endpoint if in the Claims Bag-->
            <InputClaims>
              <InputClaim ClaimTypeReferenceId="objectId"/>
              <InputClaim ClaimTypeReferenceId="givenName"/>
              <InputClaim ClaimTypeReferenceId="surname"/>
              <InputClaim ClaimTypeReferenceId="displayName"/>
              <InputClaim ClaimTypeReferenceId="signInNames.emailAddress"/>
            </InputClaims>
          </TechnicalProfile>
          <TechnicalProfile Id="UserInfoAuthorization">
            <DisplayName>UserInfo authorization</DisplayName>
            <Protocol Name="None" />
            <InputTokenFormat>JWT</InputTokenFormat>
            <Metadata>
              <!-- Update the Issuer and Audience below -->
              <!-- Audience is optional, Issuer is required-->
              <Item Key="issuer">https://yourtenant.b2clogin.com/11111111-1111-1111-1111-111111111111/v2.0/</Item>
              <Item Key="audience">[ "22222222-2222-2222-2222-222222222222", "33333333-3333-3333-3333-333333333333" ]</Item>
              <Item Key="client_assertion_type">urn:ietf:params:oauth:client-assertion-type:jwt-bearer</Item>
            </Metadata>
            <CryptographicKeys>
              <Key Id="issuer_secret" StorageReferenceId="B2C_1A_TokenSigningKeyContainer" />
            </CryptographicKeys>
            <OutputClaims>
              <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub"/>
              <OutputClaim ClaimTypeReferenceId="signInNames.emailAddress" PartnerClaimType="email"/>
              <!-- Optional claims to read from the access token. -->
              <!-- <OutputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="given_name"/>
                 <OutputClaim ClaimTypeReferenceId="surname" PartnerClaimType="family_name"/>
                 <OutputClaim ClaimTypeReferenceId="displayName" PartnerClaimType="name"/> -->
            </OutputClaims>
          </TechnicalProfile>
        </TechnicalProfiles>
      </ClaimsProvider>
    <!-- 
    </ClaimsProviders> -->
    
  4. De sectie InputClaims in het technische profiel UserInfoIssuer geeft de kenmerken op die u wilt retourneren. Het technische profiel UserInfoIssuer wordt aan het einde van het gebruikerstraject aangeroepen.

  5. Het technische profiel UserInfoAuthorization valideert de handtekening, de naam van de uitgever en de tokendoelgroep en extraheert de claim uit het binnenkomende token. Wijzig de volgende metagegevens om uw omgeving weer te geven:

    1. uitgever : deze waarde moet identiek zijn aan de iss claim binnen de toegangstokenclaim. Tokens die zijn uitgegeven door Azure AD B2C, gebruiken een verlener in de indeling https://yourtenant.b2clogin.com/your-tenant-id/v2.0/. Meer informatie over het aanpassen van tokens.

    2. IdTokenAudience : moet identiek zijn aan de aud claim binnen de claim van het toegangstoken. In Azure AD B2C is de aud claim de id van uw relying party-toepassing. Deze waarde is een verzameling en ondersteunt meerdere waarden met behulp van een kommascheidingsteken.

      In het volgende toegangstoken is https://contoso.b2clogin.com/11111111-1111-1111-1111-111111111111/v2.0/de iss claimwaarde . De aud claimwaarde is 22222222-2222-2222-2222-222222222222.

      {
        "exp": 1605549468,
        "nbf": 1605545868,
        "ver": "1.0",
        "iss": "https://contoso.b2clogin.com/11111111-1111-1111-1111-111111111111/v2.0/",
        "sub": "44444444-4444-4444-4444-444444444444",
        "aud": "22222222-2222-2222-2222-222222222222",
        "acr": "b2c_1a_signup_signin",
        "nonce": "defaultNonce",
        "iat": 1605545868,
        "auth_time": 1605545868,
        "name": "John Smith",
        "given_name": "John",
        "family_name": "Smith",
        "tid": "11111111-1111-1111-1111-111111111111"
      }
      
  6. Het element OutputClaims van het technische profiel UserInfoAuthorization geeft de kenmerken op die u wilt lezen vanuit het toegangstoken. De ClaimTypeReferenceId is de verwijzing naar een claimtype. Het optionele PartnerClaimType is de naam van de claim die is gedefinieerd in het toegangstoken.

2. Het element UserJourney toevoegen

Het element UserJourney definieert het pad dat de gebruiker gebruikt bij het werken met uw toepassing. Voeg het element UserJourneys toe als het niet bestaat met de UserJourney geïdentificeerd als UserInfoJourney:

<!-- 
<UserJourneys> -->
  <UserJourney Id="UserInfoJourney" DefaultCpimIssuerTechnicalProfileReferenceId="UserInfoIssuer">
    <Authorization>
      <AuthorizationTechnicalProfiles>
        <AuthorizationTechnicalProfile ReferenceId="UserInfoAuthorization" />
      </AuthorizationTechnicalProfiles>
    </Authorization>
    <OrchestrationSteps >
      <OrchestrationStep Order="1" Type="ClaimsExchange">
        <Preconditions>
          <Precondition Type="ClaimsExist" ExecuteActionsIf="false">
            <Value>objectId</Value>
            <Action>SkipThisOrchestrationStep</Action>
          </Precondition>
        </Preconditions>
        <ClaimsExchanges UserIdentity="false">
          <ClaimsExchange Id="AADUserReadWithObjectId" TechnicalProfileReferenceId="AAD-UserReadUsingObjectId" />
        </ClaimsExchanges>
      </OrchestrationStep>
      <OrchestrationStep Order="2" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="UserInfoIssuer" />
    </OrchestrationSteps>
  </UserJourney>
<!-- 
</UserJourneys> -->

3. Voeg het eindpunt toe aan het relying party-beleid

Als u het UserInfo-eindpunt wilt opnemen in de relying party-toepassing, voegt u een eindpuntelement toe aan het bestand SocialAndLocalAccounts/SignUpOrSignIn.xml .

<!--
<RelyingParty> -->
  <Endpoints>
    <Endpoint Id="UserInfo" UserJourneyReferenceId="UserInfoJourney" />
  </Endpoints>
<!-- 
</RelyingParty> -->

Het voltooide relying party-element is als volgt:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<TrustFrameworkPolicy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns="http://schemas.microsoft.com/online/cpim/schemas/2013/06" PolicySchemaVersion="0.3.0.0" TenantId="yourtenant.onmicrosoft.com" PolicyId="B2C_1A_signup_signin" PublicPolicyUri="http://yourtenant.onmicrosoft.com/B2C_1A_signup_signin">
  <BasePolicy>
    <TenantId>yourtenant.onmicrosoft.com</TenantId>
    <PolicyId>B2C_1A_TrustFrameworkExtensions</PolicyId>
  </BasePolicy>
  <RelyingParty>
    <DefaultUserJourney ReferenceId="SignUpOrSignIn" />
    <Endpoints>
      <Endpoint Id="UserInfo" UserJourneyReferenceId="UserInfoJourney" />
    </Endpoints>
    <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="tenantId" AlwaysUseDefaultValue="true" DefaultValue="{Policy:TenantObjectId}" />
      </OutputClaims>
      <SubjectNamingInfo ClaimType="sub" />
    </TechnicalProfile>
  </RelyingParty>
</TrustFrameworkPolicy>

4. De bestanden uploaden

  1. Meld u aan bij het Azure-portaal.
  2. Als u toegang hebt tot meerdere tenants, selecteert u het pictogram Instellingen in het bovenste menu om over te schakelen naar uw Azure AD B2C-tenant in het menu Mappen en abonnementen.
  3. Kies Alle services linksboven in de Azure Portal, zoek Azure AD B2C en selecteer deze.
  4. Selecteer Identity Experience Framework.
  5. Selecteer Aangepast beleid uploaden op de pagina Aangepast beleid.
  6. Selecteer Het aangepaste beleid overschrijven als dit al bestaat en zoek en selecteer het TrustframeworkExtensions.xml bestand.
  7. Klik op Uploaden.
  8. Herhaal stap 5 tot en met 7 voor het Relying Party-bestand, zoals SignUpOrSignIn.xml.

Het eindpunt UserInfo aanroepen

Het Eindpunt UserInfo maakt gebruik van de standaard OAuth2 Bearer-token-API, aangeroepen met behulp van het toegangstoken dat is ontvangen bij het ophalen van een token voor uw toepassing. Het retourneert een JSON-antwoord met claims over de gebruiker. Het UserInfo-eindpunt wordt gehost op Azure AD B2C op:

https://yourtenant.b2clogin.com/yourtenant.onmicrosoft.com/policy-name/openid/v2.0/userinfo

Het /..well-known configure endpoint (OpenID Verbinding maken discovery document) vermeldt het userinfo_endpoint veld. U kunt het eindpunt userinfo programmatisch detecteren met behulp van het /.bekende configuratie-eindpunt op:

https://yourtenant.b2clogin.com/yourtenant.onmicrosoft.com/policy-name/v2.0/.well-known/openid-configuration 

Het beleid testen

  1. Selecteer onder Aangepast beleid het beleid waarmee u het eindpunt UserInfo hebt geïntegreerd. Bijvoorbeeld B2C_1A_SignUpOrSignIn.
  2. Selecteer Nu uitvoeren.
  3. Selecteer onder Toepassing Selecteren uw toepassing die u eerder hebt geregistreerd. Kies voor Antwoord-URL selecteren de optie https://jwt.ms. Zie Een webtoepassing registreren in Azure Active Directory B2C voor meer informatie.
  4. Meld u aan of meld u aan met een e-mailadres of een sociaal account.
  5. Kopieer de id_token in de gecodeerde indeling van de https://jwt.ms website. U kunt dit gebruiken om een GET-aanvraag in te dienen bij het eindpunt UserInfo en de gebruikersgegevens op te halen.
  6. Dien een GET-aanvraag in bij het eindpunt UserInfo en haal de gebruikersgegevens op.
GET /yourtenant.onmicrosoft.com/b2c_1a_signup_signin/openid/v2.0/userinfo
Host: b2cninja.b2clogin.com
Authorization: Bearer <your access token>

Een geslaagd antwoord ziet er als volgt uit:

{
    "objectId": "44444444-4444-4444-4444-444444444444",
    "givenName": "John",
    "surname": "Smith",
    "displayName": "John Smith",
    "signInNames.emailAddress": "john.s@contoso.com"
}

Optionele claims opgeven

Voer de volgende stappen uit om meer claims voor uw app op te geven:

  1. Gebruikerskenmerken toevoegen en gebruikersinvoer aanpassen.

  2. Wijzig het technical profile OutputClaims-element van het Relying Party-beleid met de claims die u wilt opgeven. Gebruik het DefaultValue kenmerk om een standaardwaarde in te stellen. U kunt ook de standaardwaarde instellen op een claim-resolver, zoals {Context:CorrelationId}. Als u het gebruik van de standaardwaarde wilt afdwingen, stelt u het AlwaysUseDefaultValue kenmerk in op true. In het volgende voorbeeld wordt de plaatsclaim met een standaardwaarde toegevoegd.

    <RelyingParty>
      ...
      <TechnicalProfile Id="PolicyProfile">
        ...
        <OutputClaims>
          <OutputClaim ClaimTypeReferenceId="city" DefaultValue="Berlin" />
        </OutputClaims>
        ...
      </TechnicalProfile>
    </RelyingParty>
    
  3. Wijzig het technische profiel InputClaims-element UserInfoIssuer met de claims die u wilt opgeven. Gebruik het PartnerClaimType kenmerk om de naam van de claim te wijzigen in uw app. In het volgende voorbeeld wordt de plaatsclaim toegevoegd en wordt de naam van sommige claims gewijzigd.

    <TechnicalProfile Id="UserInfoIssuer">
      ...
      <InputClaims>
        <InputClaim ClaimTypeReferenceId="objectId" />
        <InputClaim ClaimTypeReferenceId="city" />
        <InputClaim ClaimTypeReferenceId="givenName" />
        <InputClaim ClaimTypeReferenceId="surname" PartnerClaimType="familyName" />
        <InputClaim ClaimTypeReferenceId="displayName" PartnerClaimType="name" />
        <InputClaim ClaimTypeReferenceId="signInNames.emailAddress" PartnerClaimType="email" />
      </InputClaims>
      ...
    </TechnicalProfile>
    

Volgende stappen

  • U vindt een voorbeeld van een UserInfo-eindpuntbeleid op GitHub.