다음을 통해 공유


Application Insights를 사용하여 Azure AD B2C에서 사용자 동작 추적

중요합니다

2025년 5월 1일부터 새 고객을 위해 Azure AD B2C를 더 이상 구매할 수 없습니다. FAQ에서 자세히 알아보세요.

시작하기 전에 이 페이지 위쪽의 정책 유형 선택 선택기를 사용하여 설정하려는 정책 유형을 선택합니다. Azure Active Directory B2C는 사용자가 애플리케이션과 상호 작용하는 방법을 정의하는 두 가지 방법, 즉 미리 정의된 사용자 흐름 또는 완전히 구성 가능한 사용자 지정 정책을 통해 제공합니다. 이 게시물에서 필요한 단계는 각 방법마다 다릅니다.

이 기능은 사용자 지정 정책에만 사용할 수 있습니다. 설정 단계의 경우 이전 선택기의 사용자 지정 정책을 선택합니다.

Azure AD B2C(Azure Active Directory B2C)에서 Azure AD B2C에 제공된 연결 문자열을 사용하여 이벤트 데이터를 Application Insights 에 직접 보낼 수 있습니다. Application Insights 기술 프로필을 사용하면 사용자 경험에 대한 상세하고 사용자 지정된 이벤트 로그를 가져올 수 있습니다.

  • 사용자 동작에 대한 인사이트를 얻습니다.
  • 개발 및 프로덕션 환경에서 고유의 정책 문제를 해결합니다.
  • 성능을 측정합니다.
  • Application Insights에서 알림을 만듭니다.

비고

이 기능은 공개 미리 보기로 제공됩니다.

개요

사용자 지정 이벤트 로그를 사용하도록 설정하려면 Application Insights 기술 프로필을 추가합니다. 기술 프로필에서 Application Insights 연결 문자열, 이벤트 이름 및 기록할 클레임을 정의합니다. 이벤트를 게시하려면 사용자 경험에서 기술 프로필을 오케스트레이션 단계로 추가합니다.

Application Insights를 사용하는 경우 다음을 고려합니다.

  • Application Insights에서 새 로그를 사용할 수 있기 전에 일반적으로 5분 미만의 짧은 지연이 있습니다.
  • Azure AD B2C를 사용하면 기록할 클레임을 선택할 수 있습니다. 개인 데이터가 포함된 클레임은 포함하지 마세요.
  • 사용자 세션을 기록하려면 상관 관계 ID를 사용하여 이벤트를 통합할 수 있습니다.
  • 사용자 경험 또는 하위 경험에서 직접 Application Insights 기술 프로필을 호출합니다. Application Insights 기술 프로필을 유효성 검사 기술 프로필로 사용하지 마세요.

필수 조건

Application Insights 리소스 만들기

Azure AD B2C에서 Application Insights를 사용하는 경우 리소스를 만들고 연결 문자열을 가져오기만 하면 됩니다. 자세한 내용은 Application Insights 리소스 만들기를 참조하세요.

  1. Azure Portal에 로그인합니다.
  2. 여러 테넌트에 액세스할 수 있는 경우 위쪽 메뉴에서 설정 아이콘을 선택하여 디렉터리 + 구독 메뉴에서 Microsoft Entra ID 테넌트로 전환합니다.
  3. Azure Portal의 왼쪽 위 모서리에서 리소스 만들기 를 선택한 다음 Application Insights를 검색하여 선택합니다.
  4. 선택하고생성합니다.
  5. 이름에 리소스의 이름을 입력합니다.
  6. 애플리케이션 유형에 대해 ASP.NET 웹 애플리케이션을 선택합니다.
  7. 리소스 그룹의 경우 기존 그룹을 선택하거나 새 그룹의 이름을 입력합니다.
  8. 선택하고생성합니다.
  9. 새 Application Insights 리소스를 열고 Essentials를 확장한 다음 연결 문자열을 복사합니다.

Application Insights 개요 탭의 연결 문자열을 보여 주는 스크린샷.

클레임 정의

클레임은 Azure AD B2C 정책 실행 중에 데이터의 임시 스토리지를 제공합니다. ClaimsSchema 요소에서 클레임을 선언합니다.

  1. 정책의 확장 파일을 엽니다. 파일은 다음과 비슷할 SocialAndLocalAccounts/TrustFrameworkExtensions.xml수 있습니다.

  2. BuildingBlocks 요소를 검색합니다. 요소가 표시되지 않으면 추가합니다.

  3. ClaimsSchema 요소를 찾습니다. 요소가 표시되지 않으면 추가합니다.

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

새 기술 프로필 추가

기술 프로필은 사용자 지정 정책의 함수로 간주될 수 있습니다. 이러한 함수는 기술 프로필 포함 방법을 사용합니다. 여기서 기술 프로필에는 다른 기술 프로필이 포함되고 설정이 변경되거나 새 기능이 추가됩니다. 다음 표에서는 세션을 열고 이벤트를 게시하는 데 사용되는 기술 프로필을 정의합니다.

기술 프로필 과업
AppInsights-Common 일반적인 구성을 사용하는 일반적인 기술 프로필입니다. Application Insights 연결 문자열, 기록할 클레임 컬렉션 및 개발자 모드가 포함됩니다. 다른 기술 프로필에는 일반적인 기술 프로필이 포함되며 이벤트 이름과 같은 클레임을 더 추가합니다.
AppInsights-SignInRequest 로그인 요청이 수신되었을 때 클레임 집합을 사용하여 SignInRequest 이벤트를 기록합니다.
AppInsights-UserSignUp 사용자가 등록 또는 로그인 경험에서 등록 옵션을 트리거할 때 UserSignUp 이벤트를 기록합니다.
AppInsights-SignInComplete 토큰이 신뢰 당사자 애플리케이션에 전송된 경우 인증에 성공하면 SignInComplete 이벤트를 기록합니다.

시작 팩에서 TrustFrameworkExtensions.xml 파일을 엽니다. 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 connection string, which you use for logging the events -->
        <Item Key="ConnectionString">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>

중요합니다

기술 프로필의 연결 문자열을 AppInsights-Common Application Insights 리소스가 제공하는 GUID로 변경합니다.

오케스트레이션 단계로 기술 프로필 추가

기술 프로필을 참조하는 새 오케스트레이션 단계를 추가합니다.

중요합니다

새 오케스트레이션 단계를 추가한 후 1에서 N으로의 정수를 건너뛰지 않고 단계를 순차적으로 다시 계산합니다.

  1. 사용자 경험(예: SocialAndLocalAccounts/SignUpOrSignin.xml사용자 경험)이 포함된 정책 파일을 식별한 다음 엽니다.

  2. 두 번째 오케스트레이션 단계로 호출 AppInsights-SignInRequest 합니다. 이 단계에서는 등록 또는 로그인 요청이 수신되었음을 추적합니다.

    <!-- Track that we have received a sign in request -->
    <OrchestrationStep Order="2" Type="ClaimsExchange">
      <ClaimsExchanges>
        <ClaimsExchange Id="TrackSignInRequest" TechnicalProfileReferenceId="AppInsights-SignInRequest" />
      </ClaimsExchanges>
    </OrchestrationStep>
    
  3. SendClaims 오케스트레이션 단계 전에 호출AppInsights-UserSignup하는 새 단계를 추가합니다. 사용자가 등록 또는 로그인 경험에서 등록 단추를 선택하면 트리거됩니다. 오케스트레이션 단계를 업데이트하여 첫 번째 오케스트레이션 단계부터 마지막 오케스트레이션 단계 Order="8"까지 정수는 건너뛰지 않도록 해야 할 수 있습니다.

    <!-- Handles the user selecting the sign-up link in the local account sign-in page 
     The `SendClaims` orchestration step comes after this one,
     -->
    <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>
    
  4. 오케스트레이션 단계 후에 SendClaims를 호출합니다. AppInsights-SignInComplete 이 단계에서는 성공적으로 완료된 여정을 보여줍니다. 오케스트레이션 단계인 Order="10"을 업데이트하여 첫 번째 오케스트레이션 단계부터 마지막 오케스트레이션 단계까지의 정수를 빠뜨리지 않도록 해야 할 수 있습니다.

    <!-- Track that we have successfully sent a token 
     The `SendClaims` orchestration step come before this one,
     -->
    <OrchestrationStep Order="10" Type="ClaimsExchange">
      <ClaimsExchanges>
        <ClaimsExchange Id="TrackSignInComplete" TechnicalProfileReferenceId="AppInsights-SignInComplete" />
      </ClaimsExchanges>
    </OrchestrationStep>
    

파일 업로드, 정책 실행 및 이벤트 보기

TrustFrameworkExtensions.xml 파일을 저장하고 업로드합니다. 그런 다음, 애플리케이션에서 신뢰 당사자 정책을 호출하거나 Azure Portal에서 지금 실행을 사용합니다. Application Insights에서 이벤트를 사용할 수 있을 때까지 기다립니다.

  1. Microsoft Entra 테넌트에서 Application Insights 리소스를 엽니다.
  2. 사용량을선택한 다음 이벤트를 선택합니다.
  3. During지난 1시간으로 설정하고 By3분으로 설정합니다. 결과를 보려면 창을 새로 고쳐야 할 수 있습니다.

Application Insights 이벤트 통계를 보여 주는 스크린샷

더 많은 데이터 수집

비즈니스 요구 사항에 맞게 더 많은 클레임을 기록할 수 있습니다. 클레임을 추가하려면 먼저 클레임을 정의한 다음 입력 클레임 컬렉션에 클레임을 추가합니다. AppInsights-Common 기술 프로필에 추가하는 클레임은 모든 이벤트에 표시됩니다. 특정 기술 프로필에 추가하는 클레임은 해당 이벤트에만 표시됩니다. 입력 클레임 요소에는 다음 특성이 포함됩니다.

  • ClaimTypeReferenceId 는 클레임 형식에 대한 참조입니다.
  • PartnerClaimType 은 Azure Insights에 표시되는 속성의 이름입니다. {property:NAME} 구문을 사용하여 이벤트에 추가되는 속성인 NAME을 나타냅니다.
  • DefaultValue 는 이벤트 이름과 같이 기록할 미리 정의된 값입니다. 사용자 경험에 사용되는 클레임이 비어 있으면 기본값이 사용됩니다. 예를 들어 identityProvider 클레임은 Facebook과 같은 페더레이션 기술 프로필에 의해 설정됩니다. 클레임이 비어 있으면 사용자가 로컬 계정으로 로그인했음을 나타냅니다. 따라서 기본값은 로컬로 설정됩니다. 애플리케이션 ID 또는 사용자 IP 주소와 같은 컨텍스트 값을 사용하여 클레임 확인자를 기록할 수도 있습니다.

클레임 조작

입력 클레임 변환을 사용하여 입력 클레임을 수정하거나 Application Insights로 보내기 전에 새 클레임을 생성할 수 있습니다. 다음 예제에서 기술 프로필에는 입력 클레임 변환이 CheckIsAdmin 포함됩니다.

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

이벤트 추가

이벤트를 추가하려면 기술 프로필을 포함하는 AppInsights-Common 새 기술 프로필을 만듭니다. 그런 다음 사용자 경험에 오케스트레이션 단계로 새 기술 프로필을 추가합니다. 준비되면 Precondition 요소를 사용하여 이벤트를 트리거합니다. 예를 들어 사용자가 다단계 인증을 거쳐 실행할 때만 이벤트를 보고하십시오.

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

중요합니다

사용자 경험에 이벤트를 추가할 때는 오케스트레이션 단계를 순차적으로 다시 설정해야 합니다.

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

개발자 모드를 사용하도록 설정하기

Application Insights를 사용하여 이벤트를 정의하는 경우 개발자 모드를 사용할 수 있는지 여부를 나타낼 수 있습니다. 개발자 모드는 이벤트를 버퍼링하는 방법을 제어합니다. 최소 이벤트 볼륨이 있는 개발 환경에서 개발자 모드를 사용하도록 설정하면 이벤트가 Application Insights로 즉시 전송됩니다. 기본값은 false입니다. 프로덕션 환경에서 개발자 모드를 사용하도록 설정하지 마세요.

개발자 모드를 사용하도록 설정하려면 DeveloperMode 기술 프로필에서 메타데이터 trueAppInsights-Common로 변경합니다.

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

원격 분석 사용 안 함

Application Insights 로그를 비활성화하려면 DisableTelemetry 기술 프로필에서 메타데이터를 true에서 AppInsights-Common로 변경합니다.

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

다음 단계

Azure Application Insights를 사용하여 사용자 지정 KPI 대시보드를 만드는 방법을 알아봅니다.