设备指纹的 Web 设置

设备指纹设置在两个阶段完成。

  1. 配置域名服务器(DNS)安全套接字层(SSL)证书,并将其上传到欺诈保护门户。
  2. 实现设备指纹。

本部分提供了这两个阶段的详细说明。 第一阶段必须仅完成一次。 但是,对于实施设备指纹的每个网站或移动应用,第二阶段必须重复一次。

设置 DNS 并生成 SSL 证书

完成以下过程以设置 DNS 并生成 SSL 证书。 强烈建议使用 DNS 和 SSL 设置(可选)以确保最佳的指纹覆盖和性能。 DNS 和 SSL 设置允许将指纹脚本视为第一方集成,而不是第三方 Cookie。

设置 DNS

若要设置 DNS,请执行以下步骤。

  1. 选择根域下的子域,例如 fpt.contoso.com。 可以使用任何前缀。
  2. 对于所选的子域,创建指向的规范名称 (CNAME)。fpt.dfp.microsoft.com

生成和上传 SSL 证书

若要生成和上传 SSL 证书,请执行以下步骤。

  1. 对于后端载入,请为所选子域生成 SSL 证书。 可以创建一个 SSL 证书,并在“证书的使用者可选名称”字段中添加所有子域
  2. 转到 欺诈保护门户,然后在左侧导航窗格中选择“ 集成”。
  3. “集成”页上,选择“编辑”,然后在下一页上选择“下一步以打开“上传 SSL 证书”页。
  4. 选择“ 选择证书”,然后上传生成的 SSL 证书。 如果证书具有密码,请在文本框中输入它。 然后,选择“上传”。

注意

仅支持 .pfx 文件。 将证书传播到设备指纹服务器可能需要几分钟时间。

实施设备指纹识别

在将交易发送到欺诈保护进行风险评估(例如用于添加付款方式、登录或结帐的交易)之前,网站或应用程序必须启动设备指纹请求数秒。 此要求可确保欺诈保护接收进行准确评估所需的所有数据。 本部分提供有关在网站和移动应用上实现设备指纹的详细说明。

若要实现设备指纹,请执行以下步骤。

  1. 修改以下 JavaScript 脚本代码,并将其插入到要收集设备指纹信息的网页上或应用程序中。

    <script src="https://<Your_Sub_Domain>/mdt.js?session_id=<session_id>&instanceId=<instance_id>" type="text/javascript"></script>
    
    • Your_Sub_Domain – 根域下的子域。
    • session_id – 客户端创建的设备的唯一会话标识符。 长度可达 128 个字符,只能包含以下字符:大写和小写罗马字母、数字、下划线字符和连字符(a–z、A–Z、0–9、_、-)。 会话 ID 应至少包含 16 字节的随机生成数据。 使用十六进制编码时,这转换为 32 个十六进制字符。 尽管Microsoft建议对会话 ID 使用全局唯一标识符(GUID),但这不是必需的。
    • instance_id – 这是将网站与设备指纹集成的必需值。 使用欺诈保护门户中相应环境的集成页上的“当前环境”磁贴中列出的设备指纹 ID 值。

    示例

    <script src="https://fpt.contoso.com/mdt.js?session_id=211d403b-2e65-480c-a231-fd1626c2560e&instanceId=b472dbc3-0928-4577-a589-b80090117691" type="text/javascript"></script>
    

    下面是mdt.js响应的示例。

    window.dfp={url:"https://fpt.contoso.com/?session_id=211d403b-2e65-480c-a231-fd1626c2560e&CustomerId=b472dbc3-0928-4577-a589-b80090117691",sessionId:"211d403b-2e65-480c-a231-fd1626c2560e",customerId:"b472dbc3-0928-4577-a589-b80090117691",dc:"uswest"};window.dfp.doFpt=function(doc){var frm,src;true&&(frm=doc.createElement("IFRAME"),frm.id="fpt_frame",frm.style.width="1px",frm.style.height="1px",frm.style.position="absolute",frm.style.visibility="hidden",frm.style.left="10px",frm.style.bottom="0px",frm.setAttribute("style","color:#000000;float:left;visibility:hidden;position:absolute;top:-100;left:-200;border:0px"),src="https://Your_Sub_Domain/?session_id=211d403b-2e65-480c-a231-fd1626c2560e&CustomerId=b472dbc3-0928-4577-a589-b80090117691",frm.setAttribute("src",src),doc.body.appendChild(frm))};
    
  2. 加载页面元素后加载设备指纹。

    window.dfp.doFpt(this.document);
    
  3. 在欺诈保护 API 中提交事务时,请在 deviceContextId 字段中设置会话 ID。 对于评估,在 deviceFingerprinting.id 字段中设置会话 ID

  4. device.ipAddress 字段设置为客户使用您的网站时网站收到的客户 IP 地址。 对于评估,在 deviceFingerprinting.ipAddress 字段中设置客户 IP 地址。 此字段是可选的,如果没有字段,则无需设置。

为设备指纹启用客户端集成

对于某些 Web 指纹方案,欺诈保护支持一种称为 客户端集成的专用类集成。 客户端集成不同于标准集成做法,因为指纹响应作为加密有效负载直接返回到客户端,跳过服务器到服务器的评估调用。

客户端集成对于跳过服务器到服务器调用的低延迟方案非常有用。 若要确定客户端集成是否适合你的方案,请查看以下问题指南。

  1. 我的方案设备指纹是否仅?

    如果你的方案不是设备指纹,则客户端集成不适合你的方案。

  2. 是否希望我的指纹数据位于浏览器中,而不是我的服务器提取数据?

    在传统的服务器到服务器集成中,在网站中完成属性收集后,数据将推送到欺诈保护的服务器,可以在服务器上通过进行标准评估 API 调用来获取评估响应。 但是,在客户端集成中,当属性收集数据推送到欺诈保护的服务器时,评估响应会返回并在浏览器中直接返回。 这样,服务器就可以从浏览器本身提取评估响应,而不是进行服务器到服务器的调用,从而节省一些时间。 请记住,指纹本身需要几秒钟,因此,仅当用户在页面上几秒钟时,评估响应才会出现在浏览器中。 如果方案受益于浏览器中已有的数据,则客户端集成可能适合你。

一般情况下,大多数指纹方案都由标准服务器到服务器集成解决,客户端集成对于降低延迟至关重要的几个特定方案非常有用。 由于客户端集成是一种简化且安全的专用集成类,因此必须满足以下先决条件才能启用它。

  • 你必须位于欺诈保护租户的根环境中。
  • 必须设置一个外部调用,该调用以 JSON Web 密钥集 (JWKS) 格式返回加密密钥响应。 此外部调用返回欺诈保护用于加密有效负载的密钥。 之后,可以使用此密钥解密最初接收客户端的欺诈保护响应服务器端。 你负责提供用于加密和解密的密钥。 有关设置外部调用的信息,请参阅 外部调用

以下代码显示了 JWKS 格式的示例。

{
  "keys":
  [
    {
      "kty":null,
      "use":null,
      "kid":null,
      "k":null
    }
  ]
}
  • 只能使用设备指纹评估模板的元数据和设备指纹部分。 如果有其他架构部分,或者未使用设备指纹评估模板,客户端集成选项将不可用。

当到达 设备指纹模板评估向导的“设置” 页时,你将看到可用的客户端集成选项。 选择启用客户端集成后,将使用设置的 JWKS 响应格式选择外部调用。

若要完成客户端集成设置,若要在浏览器中返回加密响应,必须使用以下 JavaScript 示例的修改版本。

<script src="https://<Your_Sub_Domain>/mdt.js?session_id=<session_id>&customerId=<customer_id>&assessment=<assessment>&requestId=<request_id>" type="text/javascript"></script>
  • Your_Sub_Domain – 根域下的子域。
  • session_id – 客户端创建的设备的唯一会话标识符。 长度可达 128 个字符,只能包含以下字符:大写和小写罗马字母、数字、下划线字符和连字符(a–z、A–Z、0–9、_、-)。 会话 ID 必须至少包含 16 字节的随机生成数据。 使用十六进制编码时,这转换为 32 个十六进制字符。 尽管Microsoft建议对会话 ID 使用全局唯一标识符(GUID),但这不是必需的。
  • customer_id – 这是将网站与设备指纹集成的必需值。 使用欺诈保护门户中相应环境的“集成”页的“当前环境”磁贴中列出的环境 ID 值。 必须位于根环境中才能运行客户端集成。
  • 评估 - 启用客户端集成时设置的设备指纹评估的 API 名称。 API 名称区分大小写,并从评估配置页拉取。
  • request_id – 请求本身的唯一标识符,独立于会话 ID。 此标识符长度应至少为 32 个字符的 GUID。

以下示例显示了包含示例值的 JavaScript 代码。

<script src="https://fpt.contoso.com/mdt.js?session_id=2b2a1f5e-afa7-4c6d-a905-ebf66eaedc83&customerId=b3f6d54b-961c-4193-95ee-b6b204c7fd23&assessment=CSI&requestId=b12e86a0-37b1-43a2-958b-3f04fe7cef6c" type="text/javascript"></script>

设置此脚本并启用客户端集成后,指纹响应将作为客户端浏览器中的加密有效负载返回。 可以使用回调函数来获取加密的响应有效负载。 下面的示例显示了正在使用的回调函数:

window.dfp.doFpt(document, function (response) {
    if(response == null || response.startsWith('ServerError'))
        console.log("Error Scenario");
    else
        console.log("Success Scenario"); // pass to server so it can decrypt and use response
});

你仍需将有效负载传递到服务器以解密它并使用响应。 我们不希望你调用外部调用来获取托管用于解密有效负载的加密密钥。 应以与获取和管理服务器上使用的其他机密相同的安全方式存储和访问密钥。

其他资源