UserInfo-slutpunkt
Innan du börjar använder du väljaren Välj en principtyp överst på den här sidan 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.
UserInfo-slutpunkten är en del av OIDC-specifikationen (OpenID Connect Standard ) och är utformad för att returnera anspråk om den autentiserade användaren. UserInfo-slutpunkten definieras i principen för förlitande part med hjälp av EndPoint-elementet .
Den här funktionen är endast tillgänglig för anpassade principer. För installationssteg väljer du Anpassad princip i föregående väljare.
Förutsättningar
- Slutför stegen i Kom igång med anpassade principer i Active Directory B2C. Den här självstudien beskriver hur du uppdaterar anpassade principfiler för att använda din Azure AD B2C-klientkonfiguration.
- Om du inte har registrerat en webbapp registrerar du en genom att följa stegen i registrera ett webbprogram.
Översikt över UserInfo-slutpunkt
Användarinformationen UserJourney anger:
- Auktorisering: UserInfo-slutpunkten skyddas med en ägartoken. En utfärdad åtkomsttoken visas i auktoriseringshuvudet till UserInfo-slutpunkten. Principen anger den tekniska profil som verifierar den inkommande token och extraherar anspråk, till exempel objectId för användaren. ObjectId för användaren används för att hämta anspråken som ska returneras i svaret på UserInfo-slutpunktsresan.
- Orkestreringssteg:
- Ett orkestreringssteg används för att samla in information om användaren. Baserat på anspråken i den inkommande åtkomsttoken anropar användarresan en teknisk Profil för Microsoft Entra-ID för att hämta data om användaren, till exempel genom att läsa användaren med objectId.
- Valfria orkestreringssteg – Du kan lägga till fler orkestreringssteg, till exempel en teknisk REST API-profil för att hämta mer information om användaren.
- UserInfo Issuer – Anger listan över anspråk som UserInfo-slutpunkten returnerar.
Skapa en UserInfo-slutpunkt
1. Lägg till den tekniska profilen token utfärdare
Öppna filen TrustFrameworkExtensions.xml .
Om det inte redan finns lägger du till elementet ClaimsProvider och dess underordnade element som det första elementet under elementet BuildingBlocks.
Lägg till följande anspråksprovider:
<!-- <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/aaaabbbb-0000-cccc-1111-dddd2222eeee/v2.0/</Item> <Item Key="audience">[ "00001111-aaaa-2222-bbbb-3333cccc4444", "11112222-bbbb-3333-cccc-4444dddd5555" ]</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> -->
Avsnittet InputClaims i den tekniska profilen UserInfoIssuer anger de attribut som du vill returnera. Den tekniska profilen UserInfoIssuer anropas i slutet av användarresan.
Den tekniska profilen UserInfoAuthorization validerar signaturen, utfärdarnamnet och tokenpubliken och extraherar anspråket från den inkommande token. Ändra följande metadata för att återspegla din miljö:
issuer – Det här värdet måste vara identiskt med anspråket
iss
i anspråket för åtkomsttoken. Token som utfärdas av Azure AD B2C använder en utfärdare i formatethttps://yourtenant.b2clogin.com/your-tenant-id/v2.0/
. Läs mer om anpassning av token.IdTokenAudience – måste vara identisk med anspråket
aud
i anspråket för åtkomsttoken. I Azure AD B2C är anspråketaud
ID för ditt förlitande partprogram. Det här värdet är en samling och stöder flera värden med hjälp av en kommaavgränsare.I följande åtkomsttoken är
https://contoso.b2clogin.com/aaaabbbb-0000-cccc-1111-dddd2222eeee/v2.0/
anspråksvärdetiss
. Anspråksvärdetaud
är00001111-aaaa-2222-bbbb-3333cccc4444
.{ "exp": 1605549468, "nbf": 1605545868, "ver": "1.0", "iss": "https://contoso.b2clogin.com/11111111-1111-1111-1111-111111111111/v2.0/", "sub": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb", "aud": "00001111-aaaa-2222-bbbb-3333cccc4444", "acr": "b2c_1a_signup_signin", "nonce": "defaultNonce", "iat": 1605545868, "auth_time": 1605545868, "name": "John Smith", "given_name": "John", "family_name": "Smith", "tid": "aaaabbbb-0000-cccc-1111-dddd2222eeee" }
Elementet OutputClaims i den tekniska profilen UserInfoAuthorization anger de attribut som du vill läsa från åtkomsttoken. ClaimTypeReferenceId är referensen till en anspråkstyp. Den valfria PartnerClaimType är namnet på anspråket som definierats i åtkomsttoken.
2. Lägg till elementet UserJourney
Elementet UserJourney definierar den sökväg som användaren tar när de interagerar med ditt program. Lägg till userJourneys-elementet om det inte finns med UserJourney identifierat som 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. Inkludera slutpunkten i principen för förlitande part
Om du vill inkludera UserInfo-slutpunkten i det förlitande partprogrammet lägger du till ett slutpunktselement i filen SocialAndLocalAccounts/SignUpOrSignIn.xml .
<!--
<RelyingParty> -->
<Endpoints>
<Endpoint Id="UserInfo" UserJourneyReferenceId="UserInfoJourney" />
</Endpoints>
<!--
</RelyingParty> -->
Det slutförda förlitande partelementet kommer att vara följande:
<?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. Ladda upp filerna
- Logga in på Azure-portalen.
- 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.
- Välj Alla tjänster på menyn högst upp till vänster i Azure-portalen och sök efter och välj Azure AD B2C.
- Välj Identity Experience Framework.
- På sidan Anpassade principer väljer du Ladda upp anpassad princip.
- Välj Skriv över den anpassade principen om den redan finns och sök sedan efter och välj filen TrustframeworkExtensions.xml .
- Klicka på Överför.
- Upprepa steg 5 till och med 7 för den förlitande partfilen, till exempel SignUpOrSignIn.xml.
Anropa UserInfo-slutpunkten
UserInfo-slutpunkten använder standard-API:et för OAuth2-ägartoken, som anropas med hjälp av den åtkomsttoken som togs emot när du hämtar en token för ditt program. Det returnerar ett JSON-svar som innehåller anspråk om användaren. UserInfo-slutpunkten finns i Azure AD B2C på:
https://yourtenant.b2clogin.com/yourtenant.onmicrosoft.com/policy-name/openid/v2.0/userinfo
I det /.välkända dokumentet för att konfigurera slutpunkt (OpenID Connect-identifiering) visas fältet userinfo_endpoint
. Du kan programmatiskt identifiera UserInfo-slutpunkten med hjälp av den /.välkända konfigurationsslutpunkten på:
https://yourtenant.b2clogin.com/yourtenant.onmicrosoft.com/policy-name/v2.0/.well-known/openid-configuration
Testa principen
- Under Anpassade principer väljer du den princip som du har integrerat UserInfo-slutpunkten med. Till exempel B2C_1A_SignUpOrSignIn.
- Välj kör nu.
- Under Välj program väljer du det program som du registrerade tidigare. För Välj svars-URL väljer du
https://jwt.ms
. Mer information finns i Registrera ett webbprogram i Azure Active Directory B2C. - Registrera dig eller logga in med en e-postadress eller ett socialt konto.
- Kopiera id_token i dess kodade format från https://jwt.ms webbplatsen. Du kan använda detta för att skicka en GET-begäran till UserInfo-slutpunkten och hämta användarinformationen.
- Skicka en GET-begäran till UserInfo-slutpunkten och hämta användarinformationen.
GET /yourtenant.onmicrosoft.com/b2c_1a_signup_signin/openid/v2.0/userinfo
Host: b2cninja.b2clogin.com
Authorization: Bearer <your access token>
Ett lyckat svar skulle se ut så här:
{
"objectId": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
"givenName": "John",
"surname": "Smith",
"displayName": "John Smith",
"signInNames.emailAddress": "john.s@contoso.com"
}
Ange valfria anspråk
Följ dessa steg för att tillhandahålla fler anspråk till din app:
Ändra den tekniska profilen OutputClaims för den förlitande partens princip med de anspråk som du vill ange. Använd attributet
DefaultValue
för att ange ett standardvärde. Du kan också ange standardvärdet till en anspråkslösare, till exempel{Context:CorrelationId}
. Om du vill framtvinga användningen av standardvärdet anger duAlwaysUseDefaultValue
attributet tilltrue
. I följande exempel läggs stadsanspråket till med ett standardvärde.<RelyingParty> ... <TechnicalProfile Id="PolicyProfile"> ... <OutputClaims> <OutputClaim ClaimTypeReferenceId="city" DefaultValue="Berlin" /> </OutputClaims> ... </TechnicalProfile> </RelyingParty>
Ändra elementet UserInfoIssuer technical profile InputClaims med de anspråk som du vill ange.
PartnerClaimType
Använd attributet för att ändra namnet på anspråksreturen till din app. I följande exempel läggs stadens anspråk till och namnet på några av anspråken ändras.<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>
Nästa steg
- Du hittar ett exempel på en UserInfo-slutpunktsprincip på GitHub.