Ponto final UserInfo
Antes de começar, use o seletor Escolha um tipo de política na parte superior desta página para escolher o tipo de política que você está configurando. O Azure Ative Directory B2C oferece dois métodos para definir como os usuários interagem com seus aplicativos: por meio de fluxos de usuário predefinidos ou por meio de políticas personalizadas totalmente configuráveis. As etapas exigidas neste artigo são diferentes para cada método.
O ponto de extremidade UserInfo faz parte da especificação padrão OpenID Connect (OIDC) e foi projetado para retornar declarações sobre o usuário autenticado. O ponto de extremidade UserInfo é definido na política de terceira parte confiável usando o elemento EndPoint .
Este recurso está disponível apenas para políticas personalizadas. Para as etapas de configuração, selecione Política personalizada no seletor anterior.
Pré-requisitos
- Conclua as etapas em Introdução às políticas personalizadas no Ative Directory B2C. Este tutorial orienta você sobre como atualizar arquivos de política personalizados para usar sua configuração de locatário do Azure AD B2C.
- Se você ainda não registrou um aplicativo Web, registre um usando as etapas em registrar um aplicativo Web.
Visão geral do ponto de extremidade UserInfo
As informações do usuário UserJourney especificam:
- Autorização: O ponto de extremidade UserInfo é protegido com um token de portador. Um token de acesso emitido é apresentado no cabeçalho de autorização para o ponto de extremidade UserInfo. A política especifica o perfil técnico que valida o token de entrada e extrai declarações, como o objectId do usuário. O objectId do usuário é usado para recuperar as declarações a serem retornadas na resposta da jornada do ponto de extremidade UserInfo.
- Etapa de orquestração:
- Uma etapa de orquestração é usada para coletar informações sobre o usuário. Com base nas declarações dentro do token de acesso de entrada, a jornada do usuário invoca um perfil técnico do Microsoft Entra ID para recuperar dados sobre o usuário, por exemplo, lendo o usuário pelo objectId.
- Etapas de orquestração opcionais - Você pode adicionar mais etapas de orquestração, como um perfil técnico da API REST para recuperar mais informações sobre o usuário.
- UserInfo Issuer - Especifica a lista de declarações que o ponto de extremidade UserInfo retorna.
Criar um ponto de extremidade UserInfo
1. Adicione o perfil técnico do Emissor de Token
Abra o arquivo TrustFrameworkExtensions.xml .
Se ainda não existir, adicione um elemento ClaimsProvider e seus elementos filho como o primeiro elemento sob o elemento BuildingBlocks.
Adicione o seguinte provedor de declarações:
<!-- <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> -->
A seção InputClaims dentro do perfil técnico UserInfoIssuer especifica os atributos que você deseja retornar. O perfil técnico UserInfoIssuer é chamado no final da jornada do usuário.
O perfil técnico UserInfoAuthorization valida a assinatura, o nome do emissor e o público do token e extrai a declaração do token de entrada. Altere os seguintes metadados para refletir seu ambiente:
emissor - Este valor deve ser idêntico à
iss
declaração dentro da declaração de token de acesso. Os tokens emitidos pelo Azure AD B2C usam um emissor no formatohttps://yourtenant.b2clogin.com/your-tenant-id/v2.0/
. Saiba mais sobre a personalização de tokens.IdTokenAudience - Deve ser idêntico à
aud
declaração dentro da declaração de token de acesso. No Azure AD B2C, aaud
declaração é a ID do seu aplicativo de terceira parte confiável. Esse valor é uma coleção e suporta vários valores usando um delimitador de vírgula.No token de acesso a seguir, o valor da
iss
declaração éhttps://contoso.b2clogin.com/aaaabbbb-0000-cccc-1111-dddd2222eeee/v2.0/
. O valor daaud
reivindicação é00001111-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" }
O elemento OutputClaims do perfil técnico UserInfoAuthorization especifica os atributos que você deseja ler do token de acesso. O ClaimTypeReferenceId é a referência a um tipo de declaração. O opcional PartnerClaimType é o nome da declaração definida no token de acesso.
2. Adicione o elemento UserJourney
O elemento UserJourney define o caminho que o usuário toma ao interagir com seu aplicativo. Adicione o elemento UserJourneys se ele não existir com o UserJourney identificado como 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. Incluir o ponto de extremidade na política da terceira parte confiadora
Para incluir o ponto de extremidade UserInfo no aplicativo de terceira parte confiável, adicione um elemento Endpoint ao arquivo SocialAndLocalAccounts/SignUpOrSignIn.xml .
<!--
<RelyingParty> -->
<Endpoints>
<Endpoint Id="UserInfo" UserJourneyReferenceId="UserInfoJourney" />
</Endpoints>
<!--
</RelyingParty> -->
O elemento de terceira parte confiadora concluído será o seguinte:
<?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. Carregue os ficheiros
- Inicie sessão no portal do Azure.
- Se você tiver acesso a vários locatários, selecione o ícone Configurações no menu superior para alternar para seu locatário do Azure AD B2C no menu Diretórios + assinaturas .
- Escolha Todos os serviços no canto superior esquerdo do portal do Azure e, em seguida, procure e selecione Azure AD B2C.
- Selecione Identity Experience Framework.
- Na página Políticas personalizadas, selecione Carregar política personalizada.
- Selecione Substituir a política personalizada, se ela já existir, e procure e selecione o arquivo TrustframeworkExtensions.xml .
- Clique em Carregar.
- Repita as etapas 5 a 7 para o arquivo de terceira parte confiável, como SignUpOrSignIn.xml.
Chamando o ponto de extremidade UserInfo
O ponto de extremidade UserInfo usa a API de token OAuth2 Bearer padrão, chamada usando o token de acesso recebido ao obter um token para seu aplicativo. Ele retorna uma resposta JSON contendo declarações sobre o usuário. O ponto de extremidade UserInfo está hospedado no Azure AD B2C em:
https://yourtenant.b2clogin.com/yourtenant.onmicrosoft.com/policy-name/openid/v2.0/userinfo
O ponto de extremidade de configuração /.well-known (documento de descoberta do OpenID Connect) lista o userinfo_endpoint
campo. Você pode descobrir programaticamente o ponto de extremidade UserInfo usando o ponto de extremidade de configuração /.well-known em:
https://yourtenant.b2clogin.com/yourtenant.onmicrosoft.com/policy-name/v2.0/.well-known/openid-configuration
Testar a política
- Em Políticas personalizadas, selecione a política com a qual você integrou o ponto de extremidade UserInfo. Por exemplo, B2C_1A_SignUpOrSignIn.
- Selecione Executar agora.
- Em Selecionar aplicativo, selecione o aplicativo que você registrou anteriormente. Em Select reply url, escolha
https://jwt.ms
. Para obter mais informações, consulte Registrar um aplicativo Web no Azure Ative Directory B2C. - Registe-se ou inicie sessão com um endereço de e-mail ou uma conta social.
- Copie o id_token em seu formato codificado do https://jwt.ms site. Você pode usar isso para enviar uma solicitação GET para o ponto de extremidade UserInfo e recuperar as informações do usuário.
- Envie uma solicitação GET para o ponto de extremidade UserInfo e recupere as informações do usuário.
GET /yourtenant.onmicrosoft.com/b2c_1a_signup_signin/openid/v2.0/userinfo
Host: b2cninja.b2clogin.com
Authorization: Bearer <your access token>
Uma resposta bem-sucedida seria semelhante a:
{
"objectId": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
"givenName": "John",
"surname": "Smith",
"displayName": "John Smith",
"signInNames.emailAddress": "john.s@contoso.com"
}
Fornecer declarações opcionais
Para fornecer mais declarações ao seu aplicativo, siga estas etapas:
Adicione atributos de usuário e personalize a entrada do usuário.
Modifique o elemento OutputClaims do perfil técnico da política de terceira parte confiável com as declarações que você deseja fornecer. Use o
DefaultValue
atributo para definir um valor padrão. Você também pode definir o valor padrão como um resolvedor de declarações, como{Context:CorrelationId}
. Para forçar o uso do valor padrão, defina oAlwaysUseDefaultValue
atributo comotrue
. O exemplo a seguir adiciona a declaração de cidade com um valor padrão.<RelyingParty> ... <TechnicalProfile Id="PolicyProfile"> ... <OutputClaims> <OutputClaim ClaimTypeReferenceId="city" DefaultValue="Berlin" /> </OutputClaims> ... </TechnicalProfile> </RelyingParty>
Modifique o elemento InputClaims do perfil técnico UserInfoIssuer com as declarações que você deseja fornecer. Use o
PartnerClaimType
atributo para alterar o nome do retorno da declaração ao seu aplicativo. O exemplo a seguir adiciona a declaração de cidade e altera o nome de algumas das declarações.<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>
Passos Seguintes
- Você pode encontrar um exemplo de uma política de ponto de extremidade UserInfo no GitHub.