다음을 통해 공유


고객 계정 보호 설정

Microsoft Dynamics 365 Fraud Protection에는 비즈니스 에코시스템에서 의심스러운 활동이 발생하는지 여부를 평가하는 데 도움이 되는 계정 보호 기능이 포함되어 있습니다. 이러한 기능에는 계정을 만들거나 기존 계정을 손상시키려는 사기성 시도를 차단하거나 이의를 제기하는 데 사용할 수 있는 위험 평가 기능이 포함됩니다. 다음 몇 가지 예를 참조하세요.

  • 실시간 위험 평가를 위한 API
  • 비즈니스 요구에 따라 위험 전략을 최적화하는 데 사용할 수 있는 규칙 및 목록 환경
  • 에코시스템에서 사기 방지 효과 및 추세를 모니터링하는 데 사용할 수 있는 모니터링 대시보드

계정 보호는 계정 생성, 계정 로그인사용자 지정 평가의 세 가지 유형의 계정 수명 주기 이벤트를 다룹니다. 각 이벤트 유형에 대해 여러 방어선이 있습니다.

  • 효율적인 봇 검색: Fraud Protection이 손상된 자격 증명 또는 무차별 암호 대입 목록을 사용하여 계정을 만들거나 수정하려는 자동화된 시도를 감지하는 경우 첫 번째 방어선은 동적이고 강력한 봇 검색입니다. 이 고급 AI(적응형 인공 지능)는 봇이 이벤트를 시작할 확률에 매핑되는 점수를 빠르게 생성합니다.
  • 실시간 강화 평가: 다음 방어선인 Fraud Protection은 AI 모델을 사용하여 위험 평가 점수를 생성합니다. 이 점수를 규칙과 함께 사용하여 비즈니스 요구 사항에 따라 로그인 및 등록 시도를 승인, 도전, 거부 또는 검토할 수 있습니다.

이 문서의 목표

이 문서에서는 다음 작업을 안내합니다.

필수 조건

이 문서에서 작업을 시작하기 전에 다음 작업을 완료해야 합니다.

1단계: 계정 보호 API 구현

Fraud Protection의 전체 기능 제품군을 활용하려면 트랜잭션 데이터를 실시간 API로 보냅니다.

  • 평가 환경에서 사기 방지를 사용한 결과를 분석할 수 있습니다.
  • 보호 환경에서는 구성한 규칙에 따라 결정을 내릴 수 있습니다.

사기 방지를 사용하는 방법에 따라 다른 계정 보호 API 를 사용할 수 있습니다. 이러한 API의 예로는 AccountCreation, AccountLogin, AccountCreationStatus, AccountLoginStatus, AccountUpdate, Label사용자 지정 이벤트가 있습니다.

지원되는 이벤트에 대한 자세한 내용은 Dynamics 365 Fraud Protection API를 참조하세요.

2단계: Microsoft Entra 앱 만들기

Important

이 단계를 완료하려면 Microsoft Entra 테넌트에서 애플리케이션 관리자, 클라우드 애플리케이션 관리자 또는 전역 관리자여야 합니다.

API를 호출하는 데 필요한 토큰을 획득하려면 Fraud Protection을 사용하여 Microsoft Entra 애플리케이션을 구성합니다.

Microsoft Entra 앱 구성

  1. Fraud Protection 포털의 왼쪽 탐색 영역에서 데이터를 선택한 다음, API 관리를 선택합니다.

  2. API 관리 페이지에서 구성을 선택합니다.

  3. 애플리케이션 만들기를 선택한 다음 필드를 입력하여 앱을 만듭니다. 다음 필드가 필요합니다.

    • 애플리케이션 표시 이름 – 앱의 설명이 포함된 이름을 입력합니다. 최대 길이는 93자입니다.

    • 환경 – 프로덕션 엔드포인트를 선택합니다.

    • 인증 방법 – 인증서 또는 암호(암호로 보호됨)를 인증에 사용할지 여부를 선택합니다.

      • 인증서를 선택한 다음 파일 선택을 선택하여 공개 키를 업로드합니다. 토큰을 획득할 때 일치하는 프라이빗 키가 필요합니다.
      • 암호를 선택하여 애플리케이션을 만든 후 자동으로 암호를 생성합니다.
  4. 필드 채우기를 마쳤으면 애플리케이션 만들기를 선택합니다.

    확인 페이지에는 선택한 인증 방법에 따라 앱의 이름과 ID, 인증서 지문 또는 비밀이 요약되어 있습니다.

Important

나중에 참조할 수 있는 인증서 지문 또는 비밀에 대한 정보를 저장합니다. 이 정보는 한 번만 표시됩니다.

추가 앱 만들기

프로덕션 환경에서 API 호출을 실행하는 데 필요한 만큼의 앱을 만들 수 있습니다.

  1. 구성 탭에서 다른 애플리케이션 만들기를 선택합니다.
  2. 필드를 입력하여 앱을 만든 다음, 애플리케이션 만들기를 선택합니다.

Fraud Protection 실시간 API 호출

이 섹션의 정보를 사용하여 시스템을 Fraud Protection과 통합합니다.

필수 ID 및 정보

  • API 엔드포인트 – 사용자 환경에 대한 URI가 Fraud Protection 대시보드의 계정 정보 타일에 표시됩니다.
  • 디렉터리(테넌트) ID – 디렉터리 ID는 Azure에서 테넌트의 할 일기본 대한 GUID(Globally Unique Identifier)입니다. Azure Portal 및 사기 방지 대시보드의 계정 정보 타일에 표시됩니다.
  • 애플리케이션(클라이언트) ID – 애플리케이션 ID는 API를 호출하기 위해 만든 Microsoft Entra 앱을 식별합니다. API Management 페이지에서 애플리케이션 만들기를 선택한 후 표시되는 확인 페이지에서 이 ID를 찾을 수 있습니다. 나중에 Azure Portal의 앱 등록 아래에서 찾을 수도 있습니다. 만드는 각 앱에 대해 하나의 ID가 있습니다.
  • 인증서 지문 또는 비밀 – API Management 페이지에서 애플리케이션만들기를 선택한 후 표시되는 확인 페이지에서 인증서 지문 또는 비밀을 찾을 수 있습니다.
  • 인스턴스 ID - 인스턴스 ID는 사기 방지 환경에서 사용자 환경에 대한 GUID(Globally Unique Identifier)입니다. 사기 방지 대시보드의 통합 타일에 표시됩니다.

액세스 토큰 생성

이 토큰을 생성하고 각 API 호출에 제공해야 합니다. 액세스 토큰의 수명은 제한됩니다. 새 액세스 토큰을 가져올 때까지 각 액세스 토큰을 캐시하고 다시 사용하는 것이 좋습니다. 다음 C# 코드 샘플에서는 인증서 또는 비밀을 사용하여 토큰을 획득하는 방법을 보여 줍니다. 자리 표시자를 사용자의 정보로 바꿉니다.

인증서 지문

   public async Task<string> AcquireTokenWithCertificateAsync()
     {
          var x509Cert = CertificateUtility.GetByThumbprint("<Certificate thumbprint>");
          var clientAssertion = new ClientAssertionCertificate("<Client ID>", x509Cert);
          var context = new AuthenticationContext("<Authority URL. Typically https://login.microsoftonline.com/[Directory_ID]>");
          var authenticationResult = await context.AcquireTokenAsync("<API endpoint>", clientAssertion);
          
          return authenticationResult.AccessToken;
     }

비밀

   public async Task<string> AcquireTokenWithSecretAsync()
     {
          var clientAssertion = new ClientCredential("<Client ID>", "<Client secret>");
          var context = new AuthenticationContext("<Authority URL. Typically https://login.microsoftonline.com/[Directory_ID]>");
          var authenticationResult = await context.AcquireTokenAsync("<API endpoint>", clientAssertion);
          
          return authenticationResult.AccessToken;
     }

Response

백그라운드에서 위의 코드는 HTTP 요청을 생성하고 다음 예제와 유사한 응답을 받습니다.

   HTTP/1.1 200 OK
     Content-Type: application/json; charset=utf-8
     Date: <date>
     Content-Length: <content length>
     {
          "token_type":"Bearer",
          "expires_in":"3599",
          "ext_expires_in":"3599",
          "expires_on":"<date timestamp>",
          "not_before":"<date timestamp>",
          "resource":"https://api.dfp.dynamics.com",
          "access_token":"<your access token; e.g.: eyJ0eXA...NFLCQ>"
     }

액세스 토큰에 대한 자세한 내용은 다음 Azure 설명서를 참조하세요.

API 호출

  1. 각 요청에 대해 다음과 같은 필수 HTTP 헤더를 전달합니다.
헤더 이름 헤더 값
권한 부여

이 헤더에 다음 형식을 사용합니다. 전달자 액세스 토큰

이 형식에서 accesstoken은 Microsoft Entra ID에서 반환되는 토큰입니다.

x-ms-correlation-id 함께 만들어진 각 API 호출 집합에 새 GUID 값을 보냅니다.
콘텐츠-형식 application/json
x-ms-dfpenvid 인스턴스 ID의 GUID 값을 보냅니다.
  1. 이벤트 기반 페이로드를 생성합니다. 이벤트 데이터를 시스템의 관련 정보로 채웁니다.

    지원되는 이벤트에 대한 자세한 내용은 Dynamics 365 Fraud Protection API를 참조하세요.

  2. 헤더(액세스 토큰 포함)와 페이로드를 결합한 다음 Fraud Protection 엔드포인트로 보냅니다. (API 엔드포인트는 사용자 환경에 대한 URI이며 Fraud Protection 대시보드의 계정 정보 타일에 표시됩니다.)

API에 대한 자세한 내용은 Dynamics 365 Fraud Protection API를 참조하세요.

3단계: 계정 보호 이벤트 이해

계정 만들기

계정 만들기 이벤트를 사용하여 새 계정을 만들려는 들어오는 시도에 대한 정보와 컨텍스트를 보냅니다. 응답에는 계정 만들기 API에 대한 결정이 포함됩니다.

URI: <API 엔드포인트>/v1.0/action/account/create/<signUpId>

signUpId은 요청당 고유해야 합니다. 다음 샘플의 메타데이터 섹션에 있는 값과 일치해야 합니다.

Important

deviceContextId값은 디바이스 지문 설정의 session_id 값과 일치해야 합니다.

샘플 페이로드

   {
          "device": {
               "deviceContextId": "2cf391cc-62d2-47d4-a9c1-78ec025293da",
               "ipAddress": "192.168.8.214",
               "provider": "DFPFingerprinting",
               "externalDeviceId": "1234567890",
               "externalDeviceType": "Tablet"
     },
     "user": {
          "userId": " cf4e1d39-1100-4791-a6cf-98580f3d91cb",
          "userType": "Consumer",
          "username": "kayla@contoso.com",
          "firstName": "Kayla",
          "lastName": "Goderich",
          "countryRegion": "US",
          "zipCode": "44329",
          "timeZone": "-08:00",
          "language": "en-us",
          "membershipId": " CC004567",
          "isMembershipIdUsername": false
     },
     "email": [
          {
          "emailType": "Primary",
          "emailValue": "kayla@contoso.com",
          "isEmailValidated": true,
          "emailValidatedDate": "2018-11-27T15:12:26.9733817-08:00",
          "isEmailUsername": true
          }
     ],
     "phone": [
          {
               "phoneType": "Alternative",
               "phoneNumber": "1-4985550190",
               "isPhoneNumberValidated": true,
               "phoneNumberValidatedDate": "2018-11-27T15:12:26.9739451-08:00",
               "isPhoneUsername": false
          }
     ],
     "address": [
          {
               "addressType": "Primary",
               "firstName": "Kayla",
               "lastName": "Goderich",
               "phoneNumber": "1-4985550190",
               "street1": "0123 Bechtelar Loop",
               "street2": "",
               "street3": "",
               "city": "Kubtown",
               "state": "SC",
               "district": "",
               "zipCode": "44329",
               "countryRegion": "US"
          }
     ],
     "paymentInstruments": [
          {
               "merchantPaymentInstrumentId": "6ac8406f-128a-41ce-a02d-1bbaa23fbe15",
               "type": "Credit Card",
               "creationDate": "2020-03-24T13:23:32.3247803-07:00",
               "updateDate": "2020-03-24T13:23:32.3248203-07:00"
          }
     ],
     "ssoAuthenticationProvider": {
          "authenticationProvider": "MerchantAuth",
          "displayName": "Kayla Goderich"
     },
     "metadata": {
          "signUpId": "f5085b48-0f9d-47f5-85d1-2c95e7842d39",
          "customerLocalDate": "2020-02-25T15:12:26.9653975-08:00",
          "assessmentType": "Protect",
          "trackingId": "d65544f0-f8b4-4249-a5e0-94b32a25548f",
          "merchantTimeStamp": "2020-11-27T15:12:26.9721842-08:00"
     },
     "name": "AP.AccountCreation",
     "version": "0.5"
     }

계정 로그인

계정 로그인 이벤트를 사용하여 새 계정 로그인을 만들려는 들어오는 시도에 대한 정보 및 컨텍스트를 보냅니다. 응답에는 계정 로그인 API에 대한 결정이 포함됩니다.

URI: <API 엔드포인트>/v1.0/action/account/login/<userId>

userId의 값은 페이로드의 값과 일치해야 합니다. 각 사용자에게는 고유한 값이 있어야 합니다. 여기에서 GUID 값을 사용할 수 있습니다.

Important

deviceContextId값은 디바이스 지문 설정의 session_id 값과 일치해야 합니다.

샘플 페이로드

  {
     "device": {
          "deviceContextId": "2ef10376-2ba8-4f36-a911-da438e5e5e27",
          "ipAddress": "192.168.8.214",
          "provider": "DFPFingerprinting",
          "externalDeviceId": "1234567890",
     "externalDeviceType": "Computer"
     },
     "user": {
          "userId": "cf4e1d39-1100-4791-a6cf-98580f3d91cb",
          "userType": "Consumer",
          "username": "kayla@contoso.com",
          "firstName": "Kayla",
          "lastName": "Goderich",
          "countryRegion": "US",
          "zipCode": "44329",
          "timeZone": "-08:00",
          "language": "en-us",
          "membershipId": "CC004567",
          "isMembershipIdUsername": false
     },
     "recentUpdate": {
          "lastPhoneNumberUpdateDate": "2018-11-127T15:22:42.3412611-08:00",
          "lastEmailUpdateDate": "2018-11-127T15:22:42.3412611-08:00 ",
          "lastAddressUpdateDate": "2018-11-127T15:22:42.3412611-08:00",
          "lastPaymentInstrumentUpdateDate": "2018-11-127T15:22:42.3412611-08:00"
     },
     "ssoAuthenticationProvider": {
          "authenticationProvider": "MerchantAuth",
          "displayName": "Kayla Goderich"
     },
     "metadata": {
          "LogInId": "a15d4a5d-fadc-49ab-8022-712fec597e22",
          "customerLocalDate": "2020-02-25T15:22:42.3397533-08:00",
          "assessmentType": "Protect",
          "trackingId": "a14ebdca-9447-49b4-951e-26f6ccc4445c",
          "merchantTimeStamp": "2020-11-27T15:22:42.3405921-08:00"
     },
     "name": "AP.AccountLogin",
     "version": "0.5"
  }

계정 만들기 상태

계정 만들기 상태 이벤트를 사용하여 들어오는 새 계정 상태 만들기 시도에 대한 정보와 컨텍스트를 보냅니다. 응답에는 계정 만들기 상태 API에 대한 결정이 포함됩니다.

URI: <API 엔드포인트>/v1.0/observe/account/create/상태/<signUpId>

userId값은 페이로드의 값과 일치해야 합니다. 각 사용자에게는 고유한 값이 있어야 합니다. 여기에서 GUID 값을 사용할 수 있습니다.

샘플 페이로드

  {
     "metadata":{
          "signUpId":"a6221a3f-c38c-429e-8fde-3026d8c29ed3",
          "userId":"34f47dc4-9781-4033-99fd-185649c4b001",
          "trackingId":"697a6bee-2d30-4132-92a6-c137aaf49c0a",
          "merchantTimeStamp":"2020-04-03T13:23:32.3226335-07:00"
     },
     "statusDetails":{
          "statusType":"Rejected",
          "reasonType":"ChallengeAbandoned",
          "challengeType":"Email",
          "statusDate":"2020-04-03T13:23:32.3817714-07:00"
     },
     "name":"AP.AccountCreation.Status",
     "version":"0.5"
  }

계정 로그인 상태

계정 로그인 상태 이벤트를 사용하여 들어오는 새 계정 로그인 상태 만들기 위한 시도에 대한 정보와 컨텍스트를 보냅니다. 응답에는 계정 로그인 상태 API에 대한 결정이 포함됩니다.

URI: <API 엔드포인트>/v1.0/observe/account/login/상태/<userId>

signUpId은 페이로드의 값과 일치해야 합니다. 각각에는 고유한 값이 있어야 합니다. 여기에서 GUID 값을 사용할 수 있습니다.

샘플 페이로드

  {
     "metadata":{
          "loginId":"dc4ea331-a6e5-4aa0-8eba-16b4d516a07d",
          "userId":"34f47dc4-9781-4033-99fd-185649c4b001",
          "trackingId":"dcd65c87-d3db-4a42-8ed3-3e59f443b994",
          "merchantTimeStamp":"2020-04-03T13:23:32.3759321-07:00"
     },
     "statusDetails":{
          "statusType":"Rejected",
          "reasonType":"ChallengeAbandoned",
          "challengeType":"Email",
          "statusDate":"2020-04-03T13:23:32.3884589-07:00"
     },
     "name":"AP.AccountLogin.Status",
     "version":"0.5"
  }

Label

레이블 이벤트를 사용하여 가상 사기 분석가 및 모니터링 기능을 알리는 데이터 외에도 Fraud Protection에 추가 정보를 보냅니다. Label API는 추가 사기 신호 집합을 기반으로 하는 모델 학습에 대한 추가 정보를 제공합니다. 또한 거래, 계정 또는 결제 수단 세부 정보 및 반전에 대한 정보를 보냅니다.

URI: <API 엔드포인트>/v1.0/label/account/create/<userId>

userId값은 해당 계정 로그인 API의 값과 일치해야 합니다.

샘플 페이로드

  {
     "metadata": {
          "name": "AP.Label.Metadata",
          "userId": "34f47dc4-9781-4033-99fd-185649c4b001",
          "merchantTimeStamp": "2020-06-14T21:53:27.8822492-08:00",
          "trackingId": "34f47dc4-9781-4033-99fd-185649c4b001"
     },
     "label": {
          "eventTimeStamp": "2020-02-21T21:53:27.8822492-08:00",
          "labelObjectType": "Account",
          "labelObjectId": "userid",
          "labelSource": "ManualReview",
          "labelState": "AccountCompromised",
          "labelReasonCode": "AccountFraud"
     },
     "name": "AP.Label",
     "version": "0.5"
     }
     public enum LabelObjectTypeName
          {
               Purchase,
               AccountCreation,
               AccountLogin,
               AccountUpdate,
               CustomFraudEvaluation,
               Account,
               PaymentInstrument,
               Email
          }
     public enum LabelSourceName
          {
               CustomerEscalation,
               Chargeback,
               TC40_SAFE,
               ManualReview,
               Refund,
               OfflineAnalysis,
               AccountProtectionReview
          }
     public enum LabelStateName
          {
               InquiryAccepted,
               Fraud,
               Disputed,
               Reversed,
               Abuse,
               ResubmittedRequest,
               AccountCompromised,
               AccountNotCompromised
          }
     public enum LabelReasonCodeName
          {
               ProcessorResponseCode,
               BankResponseCode,
               FraudRefund,
               AccountTakeOver,
               PaymentInstrumentFraud,
               AccountFraud,
               Abuse,
               FriendlyFraud,
               AccountCredentialsLeaked,
               PassedAccountProtectionChecks
          }

축하합니다! 교육을 성공적으로 완료했으며 Fraud Protection의 계정 보호 기능을 사용할 준비가 완료되었습니다.

다음 단계

다른 사기 방지 기능에 액세스하고 사용하는 방법에 대한 자세한 내용은 다음 문서를 참조하세요.