次の方法で共有


顧客アカウントの保護を設定する

重要

2025 年 2 月 3 日の時点で、Dynamics 365 Fraud Protection は購入できなくなります。 不正アクセス防止のサポートは、2026 年 2 月 3 日に終了します。 詳細については、「Dynamics 365 Fraud Protection のサポート終了 記事を参照してください。

Microsoft Dynamics 365 Fraud Protection には、ビジネス エコシステムで疑わしいアクティビティが発生しているかどうかを評価するのに役立つアカウント保護機能が含まれています。 これらの機能には、アカウントの作成や既存のアカウントの侵害に対する不正な試行をブロックまたはチャレンジするために使用できるリスク評価機能が含まれます。 次に例をいくつか示します。

  • リアルタイム リスク評価用 API
  • ビジネス ニーズに応じてリスク戦略を最適化するために使用できるルールとリスト エクスペリエンス
  • 不正行為防止の有効性とエコシステムの傾向を監視するために使用できる監視ダッシュボード

アカウント保護には、 account の作成account logincustom 評価の 3 種類のアカウント ライフサイクル イベントが含まれます。 イベントの種類ごとに、複数の防御線があります。

  • 効率的なボット検出: 不正アクセス防止によって、侵害された資格情報またはブルート フォースの一覧を使用してアカウントを作成または変更する自動試行が検出されると、その防御の最初の行は動的で堅牢な ボット検出。 この高度なアダプティブ人工知能 (AI) は、ボットがイベントを開始する確率にマップされたスコアをすばやく生成します。
  • リアルタイムの強化された評価: 次の防御ラインとして、Fraud Protection は AI モデルを使用して リスク評価スコアを生成します。 ビジネス ニーズに基づいて、このスコアをルールと共に使用して、サインインとサインアップの試行を承認、チャレンジ、拒否、またはレビューできます。

このドキュメントの目標

このドキュメントでは、次のアクティビティについて説明します。

前提条件

このドキュメントのアクティビティを開始する前に、次のタスクを完了する必要があります。

手順 1: アカウント保護 API を実装する

Fraud Protection の完全な機能スイートを利用するには、トランザクション データをリアルタイム API に送信します。

  • 評価エクスペリエンスでは、不正アクセス防止を使用した結果を分析できます。
  • 保護エクスペリエンスでは、構成した規則に基づいて決定を尊重できます。

不正アクセス防止の使用方法に応じてさまざまなアカウント保護 API を使用できます。 これらの API の例には、 AccountCreationAccountLoginAccountCreationStatus、 AccountLoginStatusAccountUpdateLabelCustom イベントがあります

サポートされているイベントの詳細については、「 Dynamics 365 Fraud Protection APIを参照してください。

手順 2: Microsoft Entra アプリを作成する

重要

この手順を完了するには、アプリケーション管理者、クラウド アプリケーション管理者、または Microsoft Entra テナントのグローバル管理者である必要があります。

API を呼び出すために必要なトークンを取得するには、Fraud Protection を使用して Microsoft Entra アプリケーションを構成します。

Microsoft Entra アプリを構成する

  1. Fraud Protection ポータルで左側のナビゲーションで Settings を選択し、Access コントロールを選択します。

  2. [アプリケーション アクセスを選択します。 [ + アプリケーション ロールの割り当て] ドロップダウンから [新しいアプリケーションの作成]を選択し、フィールドに入力してアプリを作成します。 次のフィールドが必要です。

    • アプリケーションの表示名 – アプリのわかりやすい名前を入力します。 最大長は 93 文字です。

    • 認証方法 – 認証に証明書またはシークレット (パスワードで保護) を使用するかどうかを選択します。

      • Certificate を選択し、Choose ファイルを選択して公開キーをアップロードします。 トークンを取得するときは、一致する秘密キーが必要です。
      • Secret を選択すると、アプリの作成後にパスワードが自動的に生成されます。 シークレットは証明書ほど安全ではありません。
  3. Roles ドロップダウンから、このアプリに割り当てる 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. フィールドへの入力が完了したら、 [アプリケーションの作成] を選択します。

Confirmation ページには、選択した認証方法に応じて、アプリの名前と ID、証明書の拇印またはシークレットが要約されます。

重要

今後参照するために、証明書の拇印またはシークレットに関する情報を保存します。 この情報は 1 回だけ表示されます。

追加のアプリの作成

運用環境で API 呼び出しを実行するために必要な数のアプリを作成できます。

  1. [アプリケーション アクセス] タブで、上部のナビゲーション バーの [アプリケーション ロールの割り当て] ドロップダウンから[新しいアプリケーションの作成]を選択します。
  2. フィールドに入力してアプリを作成し、 アプリケーションの作成を選択します。

不正アクセス防止のリアルタイム API を呼び出す

このセクションの情報を使用して、システムを Fraud Protection と統合します。

必要な ID と情報

  • API エンドポイント – 環境の URI は、Fraud Protection ダッシュボードの Account 情報 タイルに表示されます。
  • ディレクトリ (テナント) ID – ディレクトリ ID は、Azure 内のテナントのドメインのグローバル一意識別子 (GUID) です。 これは、Azure portal と、不正アクセス防止ダッシュボードの Account 情報 タイルに表示されます。
  • アプリケーション (クライアント) ID – アプリケーション ID は、API を呼び出すために作成した Microsoft Entra アプリを識別します。 この ID は、API Management ページで Create application を選択した後に表示される確認ページで確認できます。 後で Azure portal の [アプリの登録] で確認することもできます。 作成するアプリごとに 1 つの ID があります。
  • 証明書の拇印またはシークレット – 証明書の拇印またはシークレットは、API 管理 ページで Create application を選択した後に表示される確認ページで確認できます。
  • インスタンス ID - インスタンス ID は、Fraud Protection の環境のグローバル一意識別子 (GUID) です。 不正アクセス防止ダッシュボードの Integration タイルに表示されます。

アクセス トークンを生成する

このトークンを生成し、各 API 呼び出しで提供する必要があります。 アクセス トークンの有効期間が制限されていることに注意してください。 新しいアクセス トークンを取得するまで、各アクセス トークンをキャッシュして再利用することをお勧めします。 次の C# コード サンプルは、証明書またはシークレットを使用してトークンを取得する方法を示しています。 プレースホルダーは独自の情報に置き換えてください。

CERTIFICATE 拇印

   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 値を送信します。
Content-Type アプリケーション /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: アカウント保護イベントについて

アカウントの作成

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

アカウントの作成の状態

Account Create Status イベントを使用して、新しいアカウントの状態を作成するための受信試行に関する情報とコンテキストを送信します。 応答には、アカウント作成ステータス 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"
  }

アカウント ログインの状態

Account Login Status イベントを使用して、新しいアカウント ログイン状態を作成する受信試行に関する情報とコンテキストを送信します。 応答には、アカウント ログイン ステータス 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 イベントを使用して、仮想詐欺アナリストと監視機能に通知するデータに加えて、Fraud Protection に追加情報を送信します。 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
          }

おめでとうございます。 トレーニングが正常に完了し、Fraud Protection のアカウント保護機能を使用する準備が整いました。

次のステップ

他の不正アクセス防止機能にアクセスして使用する方法については、次のドキュメントを参照してください。