共用方式為


設定客戶帳戶保護

Microsoft Dynamics 365 Fraud Protection 包含帳戶保護功能,可協助您評估商務生態系統中是否有任何可疑的活動。 這些功能包括可用來封鎖或挑戰詐騙嘗試建立帳戶或入侵現有帳戶的風險評估功能。 以下列出一些範例:

  • 實時風險評估的 API
  • 您可以根據業務需求使用的規則和清單體驗,將風險策略優化
  • 監視儀錶板,可用來監視生態系統中的詐騙保護有效性和趨勢

帳戶保護涵蓋三種類型的帳戶生命週期事件: 帳戶建立帳戶登入自定義評定。 針對每個事件類型,都有多道防線:

  • 有效率的 Bot 偵測:當詐騙保護偵測到自動嘗試使用遭入侵的認證或暴力密碼破解清單來建立或修改帳戶時,其第一道防線是動態且健全 的 Bot 偵測。 這個進階調適型人工智慧 (AI) 會快速產生一個分數,其對應至 Bot 起始事件的機率。
  • 實時強化評定:作為其下一道防線,詐騙保護會使用AI模型來產生 風險評估分數。 您可以使用此分數搭配規則,根據業務需求核准、挑戰、拒絕或檢閱登入和註冊嘗試。

本文件的目標

本檔案會引導您完成下列活動:

必要條件

開始本檔案中的活動之前,您必須先完成下列工作:

步驟 1:實作帳戶保護 API

若要利用詐騙保護中完整的功能套件,請將您的事務數據傳送至即時 API。

  • 在評估體驗中,您可以使用詐騙保護來分析的結果。
  • 在保護體驗中,您可以根據您已設定的規則接受決策。

視您想要使用詐騙保護的方式而定,您可以使用不同的 帳戶保護 API 。 這些 API 的範例包括:AccountCreation、AccountLoginAccountCreationStatu s、AccountLoginStatusAccountUpdateLabel自定義事件

如需支援事件的詳細資訊,請參閱 Dynamics 365 Fraud Protection API

步驟 2:建立 Microsoft Entra 應用程式

重要

若要完成此步驟,您必須是Microsoft Entra 租使用者中的應用程式管理員、雲端應用程式管理員或全域管理員。

若要取得呼叫 API 所需的令牌,請使用 Fraud Protection 來設定 entra 應用程式Microsoft。

設定 Microsoft Entra 應用程式

  1. 在 [詐騙保護] 入口 網站的左側導覽中,選取 [ 設定],然後選取 [ 訪問控制]。

  2. 選取 [ 應用程式存取]。 從 [ + 指派應用程式角色] 下拉式清單中,選取 [建立新的應用程式],然後填入欄位以建立您的應用程式。 需要下列欄位:

    • 應用程式顯示名稱 – 輸入應用程式的描述性名稱。 最大長度為93個字元。

    • 驗證方法 – 選取憑證或密碼(受密碼保護)是否用於驗證。

      • 選取 [ 憑證],然後選取 [ 選擇檔案 ] 以上傳公鑰。 當您取得令牌時,您需要相符的私鑰。
      • 選取 [ 秘密 ] 以在應用程式建立之後自動產生密碼。 秘密不如憑證那麼安全。
  3. [角色] 下拉式清單中選取您想要指派給此應用程式的 API 角色 。 默認會選取Risk_API角色。 您可以隨時編輯 API 角色。

  • Risk_API – 指派Risk_API角色的 Entra 應用程式可以呼叫 Fraud Protection 評定和觀察事件 API 端點。
  • Provisioning_API – 指派Provisioning_API角色的 Entra 應用程式可以呼叫 Fraud Protection 布建 API 端點,以允許建立、更新和刪除非根環境。

重要

您可以隨時編輯現有 Entra 應用程式的 API 角色。 若要深入瞭解,請參閱 設定Microsoft Entra 應用程式存取 一文。

  1. 當您完成填入欄位時,請選取 [ 建立應用程式]。

[ 確認 ] 頁面摘要說明應用程式的名稱和標識符,以及憑證指紋或密碼,視您選取的驗證方法而定。

重要

儲存憑證指紋或秘密的相關信息,以供日後參考。 此資訊只會顯示一次。

建立其他應用程式

您可以視需要在生產環境中執行 API 呼叫,建立盡可能多的應用程式。

  1. 在 [應用程式存取] 索引標籤上,從頂端導覽列中的 [指派應用程式角色] 下拉式清單中選取 [建立新的應用程式]。
  2. 填寫欄位以建立您的應用程式,然後選取 [ 建立應用程式]。

呼叫詐騙保護即時 API

使用本節中的資訊,將系統與詐騙保護整合。

必要標識碼和資訊

  • API 端點 – 您環境的 URI 會出現在 詐騙保護儀錶板上的 [帳戶資訊 ] 圖格上。
  • 目錄(租使用者)標識碼 – 目錄標識符是 Azure 中租使用者網域的全域唯一標識碼 (GUID)。 它會出現在 [詐騙保護] 儀錶板的 [Azure 入口網站] 和 [帳戶資訊] 圖格上。
  • 應用程式 (用戶端) 識別碼 – 應用程式識別符會識別您建立來呼叫 API 的 Microsoft Entra 應用程式。 您可以在 API 管理 頁面上選取 [建立應用程式] 之後出現的確認頁面上找到此識別碼。 您稍後也可以在 Azure 入口網站 的 [應用程式註冊] 下找到它。 您建立的每個應用程式都會有一個識別碼。
  • 憑證指紋或密碼 – 您可以在 API 管理 頁面上選取 [建立應用程式] 之後,於確認頁面上找到憑證指紋或密碼。
  • 實例識別碼 - 實例標識符是詐騙保護中您環境的全域唯一標識碼 (GUID)。 它會出現在 [詐騙保護] 儀錶板的 [整合 ] 圖格中。

產生存取權杖

您必須產生此令牌,並提供每個 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;
     }

回應

在幕後,上述程式代碼會產生 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 標頭。
標頭名稱 標頭值
授權

針對此標頭使用下列格式:Bearer accesstoken

在此格式中,accesstoken 是Microsoft Entra ID 所傳回的令牌。

x-ms-correlation-id 在每個一組一起進行的 API 呼叫上傳送新的 GUID 值。
內容-類型 application/json
x-ms-dfpenvid 傳送實例標識碼的 GUID 值。
  1. 產生事件型承載。 以系統的相關信息填入事件數據。

    如需支援事件的詳細資訊,請參閱 Dynamics 365 Fraud Protection API

  2. 結合標頭(包括存取令牌)和承載,然後將它們傳送至您的詐騙保護端點。 (API 端點是您環境的 URI,並出現在 [詐騙保護] 儀錶板上的 [帳戶資訊] 圖格上。

如需 API 的詳細資訊,請參閱 Dynamics 365 Fraud Protection API

步驟 3:了解帳戶保護事件

帳戶建立

使用 Account Create 事件來傳送傳入嘗試建立新帳戶的相關信息和內容。 回應包含帳戶建立 API 的決策。

URI: <API 端點>/v1.0/action/account/create/<signUpId>

signUpId 的值應該為每個要求是唯一的。 它應該符合下列範例中元數據區段中的值。

重要

deviceContextId 的值應該符合裝置指紋設定中session_id的值

範例承載

   {
          "device": {
               "deviceContextId": "2cf391cc-62d2-47d4-a9c1-78ec025293da",
               "ipAddress": "192.168.8.214",
               "provider": "DFPFingerprinting",
               "externalDeviceId": "1234567890",
               "externalDeviceType": "Tablet"
     },
     "user": {
          "userId": " 00aa00aa-bb11-cc22-dd33-44ee44ee44ee",
          "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"
     }

帳戶登入

使用 Account Login 事件來傳送傳入嘗試建立新帳戶登入的信息和內容。 回應包含帳戶登入 API 的決策。

URI: <API 端點>/v1.0/action/account/login/<userId>

userId 的值必須符合承載中的值。 每個用戶都必須有唯一的值。 您可以在這裡使用 GUID 值。

重要

deviceContextId 的值應該符合裝置指紋設定中session_id的值

範例承載

  {
     "device": {
          "deviceContextId": "2ef10376-2ba8-4f36-a911-da438e5e5e27",
          "ipAddress": "192.168.8.214",
          "provider": "DFPFingerprinting",
          "externalDeviceId": "1234567890",
     "externalDeviceType": "Computer"
     },
     "user": {
          "userId": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee",
          "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/status/<signUpId>

userId 的值必須符合承載中的值。 每個用戶都必須有唯一的值。 您可以在這裡使用 GUID 值。

範例承載

  {
     "metadata":{
          "signUpId":"a6221a3f-c38c-429e-8fde-3026d8c29ed3",
          "userId":"11bb11bb-cc22-dd33-ee44-55ff55ff55ff",
          "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/status/<userId>

signUpId 的值必須符合承載中的值。 每個都必須有唯一的值。 您可以在這裡使用 GUID 值。

範例承載

  {
     "metadata":{
          "loginId":"dc4ea331-a6e5-4aa0-8eba-16b4d516a07d",
          "userId":"11bb11bb-cc22-dd33-ee44-55ff55ff55ff",
          "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 事件將其他資訊傳送至詐騙保護。 Label API 會根據一組額外的詐騙訊號,提供模型定型的其他資訊。 它也會傳送交易、帳戶或付款方式詳細數據以及逆轉的相關信息。

URI: <API 端點>/v1.0/label/account/create/<userId>

userId 的值必須符合對應帳戶登入 API 中的值。

範例承載

  {
     "metadata": {
          "name": "AP.Label.Metadata",
          "userId": "11bb11bb-cc22-dd33-ee44-55ff55ff55ff",
          "merchantTimeStamp": "2020-06-14T21:53:27.8822492-08:00",
          "trackingId": "11bb11bb-cc22-dd33-ee44-55ff55ff55ff"
     },
     "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
          }

恭喜! 您已成功完成訓練,並已準備好使用詐騙保護的帳戶保護功能。

下一步

如需如何存取和使用其他詐騙保護功能的詳細資訊,請參閱下列檔: