Controlar o comportamento do usuário no Azure AD B2C usando o Application Insights

Antes de começar, use o seletor Escolha um tipo de política 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.

Este recurso está disponível apenas para políticas personalizadas. Para as etapas de configuração, selecione Política personalizada no seletor anterior.

No Azure Ative Directory B2C (Azure AD B2C), você pode enviar dados de eventos diretamente para o Application Insights usando a chave de instrumentação fornecida ao Azure AD B2C. Com um perfil técnico do Application Insights, você pode obter logs de eventos detalhados e personalizados para suas jornadas de usuário para:

  • Obtenha informações sobre o comportamento do usuário.
  • Solucione problemas de suas próprias políticas em desenvolvimento ou produção.
  • Meça o desempenho.
  • Crie notificações a partir do Application Insights.

Descrição geral

Para habilitar logs de eventos personalizados, adicione um perfil técnico do Application Insights. No perfil técnico, você define a chave de instrumentação do Application Insights, o nome do evento e as declarações a serem registradas. Para postar um evento, adicione o perfil técnico como uma etapa de orquestração em uma jornada do usuário.

Ao usar o Application Insights, considere o seguinte:

  • Há um pequeno atraso, geralmente inferior a cinco minutos, antes que novos logs estejam disponíveis no Application Insights.
  • O Azure AD B2C permite que você escolha quais declarações registrar. Não inclua reclamações com dados pessoais.
  • Para gravar uma sessão de usuário, você pode usar uma ID de correlação para unificar eventos.
  • Chame o perfil técnico do Application Insights diretamente de uma jornada do usuário ou de uma subjornada. Não use um perfil técnico do Application Insights como um perfil técnico de validação.

Pré-requisitos

Criar um recurso Application Insights

Quando você usa o Application Insights com o Azure AD B2C, tudo o que você precisa fazer é criar um recurso e obter a chave de instrumentação. Para obter informações, consulte Criar um recurso do Application Insights.

  1. Inicie sessão no portal do Azure.
  2. Se você tiver acesso a vários locatários, selecione o ícone Configurações no menu superior para alternar para seu locatário do Microsoft Entra ID no menu Diretórios + assinaturas .
  3. Escolha Criar um recurso no canto superior esquerdo do portal do Azure e, em seguida, procure e selecione Application Insights.
  4. Selecione Criar.
  5. Em Nome, insira um nome para o recurso.
  6. Em Tipo de Aplicativo, selecione ASP.NET aplicativo Web.
  7. Em Grupo de Recursos, selecione um grupo existente ou insira um nome para um novo grupo.
  8. Selecione Criar.
  9. Abra o novo recurso do Application Insights, expanda Essentials e copie a chave de instrumentação.

Screenshot that shows the Instrumentation Key on the Application Insights Overview tab.

Definir declarações

Uma declaração fornece armazenamento temporário de dados durante a execução de uma política do Azure AD B2C. Você declara suas declarações no elemento ClaimsSchema.

  1. Abra o arquivo de extensões da sua política. O arquivo pode ser semelhante a SocialAndLocalAccounts/TrustFrameworkExtensions.xml.

  2. Procure o elemento BuildingBlocks . Se não vir o elemento, adicione-o.

  3. Localize o elemento ClaimsSchema . Se não vir o elemento, adicione-o.

  4. Adicione as seguintes declarações ao elemento ClaimsSchema :

    <ClaimType Id="EventType">
      <DisplayName>Event type</DisplayName>
      <DataType>string</DataType>
    </ClaimType>
    <ClaimType Id="EventTimestamp">
      <DisplayName>Event timestamp</DisplayName>
      <DataType>string</DataType>
    </ClaimType>
    <ClaimType Id="PolicyId">
      <DisplayName>Policy Id</DisplayName>
      <DataType>string</DataType>
    </ClaimType>
    <ClaimType Id="Culture">
      <DisplayName>Culture ID</DisplayName>
      <DataType>string</DataType>
    </ClaimType>
    <ClaimType Id="CorrelationId">
      <DisplayName>Correlation Id</DisplayName>
      <DataType>string</DataType>
    </ClaimType>
    <ClaimType Id="federatedUser">
      <DisplayName>Federated user</DisplayName>
      <DataType>boolean</DataType>
    </ClaimType>
    <ClaimType Id="parsedDomain">
      <DisplayName>Domain name</DisplayName>
      <DataType>string</DataType>
      <UserHelpText>The domain portion of the email address.</UserHelpText>
    </ClaimType>
    <ClaimType Id="userInLocalDirectory">
      <DisplayName>userInLocalDirectory</DisplayName>
      <DataType>boolean</DataType>
    </ClaimType>
    

Adicionar novos perfis técnicos

Os perfis técnicos podem ser considerados funções na política personalizada. Essas funções usam a abordagem de inclusão de perfil técnico, onde um perfil técnico inclui outro perfil técnico e altera configurações ou adiciona novas funcionalidades. A tabela a seguir define os perfis técnicos usados para abrir uma sessão e postar eventos.

Perfil técnico Tarefa
AppInsights-Comum O perfil técnico comum com configuração típica. Ele inclui a chave de instrumentação do Application Insights, uma coleção de declarações a serem registradas e o modo de desenvolvedor. Os outros perfis técnicos incluem o perfil técnico comum e adicionam mais declarações, como o nome do evento.
AppInsights-SignInRequest Registra um evento SignInRequest com um conjunto de declarações quando uma solicitação de entrada foi recebida.
AppInsights-UserSignUp Registra um evento UserSignUp quando o usuário aciona a opção de inscrição em uma jornada de inscrição ou login.
AppInsights-SignInComplete Registra um evento SignInComplete após a autenticação bem-sucedida, quando um token foi enviado para o aplicativo de terceira parte confiável.

Abra o arquivo TrustFrameworkExtensions.xml do pacote inicial. Adicione os perfis técnicos ao elemento ClaimsProvider :

<ClaimsProvider>
  <DisplayName>Application Insights</DisplayName>
  <TechnicalProfiles>
    <TechnicalProfile Id="AppInsights-Common">
      <DisplayName>Application Insights</DisplayName>
      <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.Insights.AzureApplicationInsightsProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
      <Metadata>
        <!-- The ApplicationInsights instrumentation key, which you use for logging the events -->
        <Item Key="InstrumentationKey">xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx</Item>
        <Item Key="DeveloperMode">false</Item>
        <Item Key="DisableTelemetry ">false</Item>
      </Metadata>
      <InputClaims>
        <!-- Properties of an event are added through the syntax {property:NAME}, where NAME is the property being added to the event. DefaultValue can be either a static value or a value that's resolved by one of the supported DefaultClaimResolvers. -->
        <InputClaim ClaimTypeReferenceId="EventTimestamp" PartnerClaimType="{property:EventTimestamp}" DefaultValue="{Context:DateTimeInUtc}" />
        <InputClaim ClaimTypeReferenceId="tenantId" PartnerClaimType="{property:TenantId}" DefaultValue="{Policy:TrustFrameworkTenantId}" />
        <InputClaim ClaimTypeReferenceId="PolicyId" PartnerClaimType="{property:Policy}" DefaultValue="{Policy:PolicyId}" />
        <InputClaim ClaimTypeReferenceId="CorrelationId" PartnerClaimType="{property:CorrelationId}" DefaultValue="{Context:CorrelationId}" />
        <InputClaim ClaimTypeReferenceId="Culture" PartnerClaimType="{property:Culture}" DefaultValue="{Culture:RFC5646}" />
      </InputClaims>
    </TechnicalProfile>

    <TechnicalProfile Id="AppInsights-SignInRequest">
      <InputClaims>
        <!-- An input claim with a PartnerClaimType="eventName" is required. This is used by the AzureApplicationInsightsProvider to create an event with the specified value. -->
        <InputClaim ClaimTypeReferenceId="EventType" PartnerClaimType="eventName" DefaultValue="SignInRequest" />
      </InputClaims>
      <IncludeTechnicalProfile ReferenceId="AppInsights-Common" />
    </TechnicalProfile>

    <TechnicalProfile Id="AppInsights-UserSignUp">
      <InputClaims>
        <InputClaim ClaimTypeReferenceId="EventType" PartnerClaimType="eventName" DefaultValue="UserSignUp" />
      </InputClaims>
      <IncludeTechnicalProfile ReferenceId="AppInsights-Common" />
    </TechnicalProfile>

    <TechnicalProfile Id="AppInsights-SignInComplete">
      <InputClaims>
        <InputClaim ClaimTypeReferenceId="EventType" PartnerClaimType="eventName" DefaultValue="SignInComplete" />
        <InputClaim ClaimTypeReferenceId="federatedUser" PartnerClaimType="{property:FederatedUser}" DefaultValue="false" />
        <InputClaim ClaimTypeReferenceId="parsedDomain" PartnerClaimType="{property:FederationPartner}" DefaultValue="Not Applicable" />
        <InputClaim ClaimTypeReferenceId="identityProvider" PartnerClaimType="{property:IDP}" DefaultValue="Local" />
      </InputClaims>
      <IncludeTechnicalProfile ReferenceId="AppInsights-Common" />
    </TechnicalProfile>
  </TechnicalProfiles>
</ClaimsProvider>

Importante

Altere a AppInsights-Common chave de instrumentação no perfil técnico para o GUID fornecido pelo recurso do Application Insights.

Adicione os perfis técnicos como etapas de orquestração

Adicione novas etapas de orquestração que se refiram aos perfis técnicos.

Importante

Depois de adicionar as novas etapas de orquestração, renumere as etapas sequencialmente sem pular nenhum número inteiro de 1 para N.

  1. Chamada AppInsights-SignInRequest como o segundo passo de orquestração. Esta etapa rastreia se uma solicitação de inscrição ou entrada foi recebida.

    <!-- Track that we have received a sign in request -->
    <OrchestrationStep Order="2" Type="ClaimsExchange">
      <ClaimsExchanges>
        <ClaimsExchange Id="TrackSignInRequest" TechnicalProfileReferenceId="AppInsights-SignInRequest" />
      </ClaimsExchanges>
    </OrchestrationStep>
    
  2. Antes da etapa de orquestração, adicione uma nova etapa que chame SendClaims AppInsights-UserSignup. Ele é acionado quando o usuário seleciona o botão de inscrição em uma jornada de inscrição ou login.

    <!-- Handles the user selecting the sign-up link in the local account sign-in page -->
    <OrchestrationStep Order="8" Type="ClaimsExchange">
      <Preconditions>
        <Precondition Type="ClaimsExist" ExecuteActionsIf="false">
          <Value>newUser</Value>
          <Action>SkipThisOrchestrationStep</Action>
        </Precondition>
        <Precondition Type="ClaimEquals" ExecuteActionsIf="true">
          <Value>newUser</Value>
          <Value>false</Value>
          <Action>SkipThisOrchestrationStep</Action>
        </Precondition>
      </Preconditions>
      <ClaimsExchanges>
        <ClaimsExchange Id="TrackUserSignUp" TechnicalProfileReferenceId="AppInsights-UserSignup" />
      </ClaimsExchanges>
    </OrchestrationStep>
    
  3. Após a etapa de SendClaims orquestração, ligue para AppInsights-SignInComplete. Esta etapa mostra uma jornada concluída com sucesso.

    <!-- Track that we have successfully sent a token -->
    <OrchestrationStep Order="10" Type="ClaimsExchange">
      <ClaimsExchanges>
        <ClaimsExchange Id="TrackSignInComplete" TechnicalProfileReferenceId="AppInsights-SignInComplete" />
      </ClaimsExchanges>
    </OrchestrationStep>
    

Carregue o ficheiro, execute a política e veja eventos

Salve e carregue o arquivo TrustFrameworkExtensions.xml arquivo. Em seguida, chame a política de terceira parte confiável do seu aplicativo ou use Executar agora no portal do Azure. Aguarde até que seus eventos estejam disponíveis no Application Insights.

  1. Abra o recurso Application Insights em seu locatário do Microsoft Entra.
  2. Selecione Utilização e, em seguida, selecione Eventos.
  3. Defina Durante para Última hora e Até 3 minutos. Talvez seja necessário atualizar a janela para ver os resultados.

Screenshot that shows Application Insights event statistics.

Recolher mais dados

Para atender às suas necessidades comerciais, convém registrar mais reclamações. Para adicionar uma declaração, primeiro defina uma declaração e, em seguida, adicione a declaração à coleção de declarações de entrada. As declarações adicionadas ao perfil técnico AppInsights-Common aparecem em todos os eventos. As declarações adicionadas a um perfil técnico específico aparecem apenas nesse evento. O elemento input claim contém os seguintes atributos:

  • ClaimTypeReferenceId é a referência a um tipo de declaração.
  • PartnerClaimType é o nome da propriedade que aparece no Azure Insights. Use a sintaxe de , onde NAME é uma propriedade que está sendo adicionada {property:NAME}ao evento.
  • DefaultValue é um valor predefinido a ser registrado, como um nome de evento. Se uma declaração usada na jornada do usuário estiver vazia, o valor padrão será usado. Por exemplo, a identityProvider declaração é definida pelos perfis técnicos da federação, como o Facebook. Se a declaração estiver vazia, indica que o utilizador iniciou sessão com uma conta local. Assim, o valor padrão é definido como Local. Você também pode registrar um resolvedor de declarações com um valor contextual, como o ID do aplicativo ou o endereço IP do usuário.

Manipular declarações

Você pode usar transformações de declarações de entrada para modificar as declarações de entrada ou gerar novas antes de enviá-las para o Application Insights. No exemplo a seguir, o perfil técnico inclui a transformação de declarações de CheckIsAdmin entrada.

<TechnicalProfile Id="AppInsights-SignInComplete">
  <InputClaimsTransformations>  
    <InputClaimsTransformation ReferenceId="CheckIsAdmin" />
  </InputClaimsTransformations>
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="isAdmin" PartnerClaimType="{property:IsAdmin}"  />
    ...
  </InputClaims>
  <IncludeTechnicalProfile ReferenceId="AppInsights-Common" />
</TechnicalProfile>

Adicionar eventos

Para adicionar um evento, crie um novo perfil técnico que inclua o AppInsights-Common perfil técnico. Em seguida, adicione o novo perfil técnico como uma etapa de orquestração à jornada do usuário. Use o elemento Pré-condição para acionar o evento quando estiver pronto. Por exemplo, relate o evento somente quando os usuários executarem a autenticação multifator.

<TechnicalProfile Id="AppInsights-MFA-Completed">
  <InputClaims>
     <InputClaim ClaimTypeReferenceId="EventType" PartnerClaimType="eventName" DefaultValue="MFA-Completed" />
  </InputClaims>
  <IncludeTechnicalProfile ReferenceId="AppInsights-Common" />
</TechnicalProfile>

Importante

Ao adicionar um evento à jornada do usuário, lembre-se de renumerar as etapas de orquestração sequencialmente.

<OrchestrationStep Order="8" Type="ClaimsExchange">
  <Precondition Type="ClaimsExist" ExecuteActionsIf="true">
    <Value>isActiveMFASession</Value>
    <Action>SkipThisOrchestrationStep</Action>
    </Precondition>
  </Preconditions>
  <ClaimsExchanges>
    <ClaimsExchange Id="TrackUserMfaCompleted" TechnicalProfileReferenceId="AppInsights-MFA-Completed" />
  </ClaimsExchanges>
</OrchestrationStep>

Ativar o modo de desenvolvedor

Ao usar o Application Insights para definir eventos, você pode indicar se o modo de desenvolvedor está habilitado. O modo de desenvolvedor controla como os eventos são armazenados em buffer. Em um ambiente de desenvolvimento com volume mínimo de eventos, habilitar o modo de desenvolvedor resulta em eventos enviados imediatamente para o Application Insights. O valor predefinido é false. Não habilite o modo de desenvolvedor em ambientes de produção.

Para habilitar o AppInsights-Common modo de desenvolvedor, altere os DeveloperMode metadados para true no perfil técnico:

<TechnicalProfile Id="AppInsights-Common">
  <Metadata>
    ...
    <Item Key="DeveloperMode">true</Item>
  </Metadata>
</TechnicalProfile>

Desativar telemetria

Para desativar os logs do AppInsights-Common Application Insights, altere os DisableTelemetry metadados para true no perfil técnico:

<TechnicalProfile Id="AppInsights-Common">
  <Metadata>
    ...
    <Item Key="DisableTelemetry">true</Item>
  </Metadata>
</TechnicalProfile>

Próximos passos

Saiba como criar painéis de KPI personalizados usando o Azure Application Insights.