[Alpha]{class="badge informative"}

身份验证

Server SDK在您控制的受信任环境中运行。 因此,它将事件发送到经过身份验证的Edge Network服务器API,而不是浏览器使用的未经身份验证的端点。 经过身份验证的请求允许Edge Network信任您的服务器发送的数据。

为了进行身份验证,SDK需要来自Adobe Developer Console的​OAuth服务器到服务器凭据。 您使用edgeCredentials选项(必需)将其传递给configure。 SDK使用该凭据从Adobe请求访问令牌,然后将该令牌添加到每个经过身份验证的请求。

创建OAuth服务器到服务器凭据 create-credential

要创建凭据,您必须是贵组织中的Adobe Experience Platform开发人员和用户。 然后完成以下步骤:

  1. 登录到Adobe Developer Console并选择您的组织。

  2. 导航到​ 项目 ​并选择现有项目,或创建一个新项目。

  3. 将​ Experience Platform API ​添加到项目中,并选择​ OAuth服务器到服务器 ​作为身份验证类型。

  4. 为凭据选择产品配置文件。

  5. 在凭据的页面上,复制以下值:

    • 客户端ID
    • 客户端密钥。 选择​ 检索客户端密钥 ​以显示它。
    • 范围

有关每个步骤的详细说明和屏幕截图,请参阅身份验证和访问Experience Platform API,包括如何获取开发人员和用户访问权限。

使用您的凭据配置SDK configure

调用configure时,将您复制的值传递到edgeCredentials选项。 从环境变量或密钥管理器中读取它们,而不是将它们置于源代码中。

await alloy.configure({
  datastreamId: "ebebf826-a01f-4458-8cec-ef61de241c93",
  orgId: "ADB3LETTERSANDNUMBERS@AdobeOrg",
  edgeCredentials: {
    clientId: process.env.ADOBE_CLIENT_ID,
    clientSecret: process.env.ADOBE_CLIENT_SECRET,
    scopes: process.env.ADOBE_SCOPES.split(",")
  }
});

如果您省略edgeCredentials,configure会因错误而拒绝。 有关属性的完整列表,请参阅edgeCredentials。

对凭据和orgId选项使用相同的组织。 SDK在每个已验证请求的x-gw-ims-org-id标头中发送orgId。

哪些请求已通过身份验证 authenticated-requests

只有sendEvent使用经过身份验证的服务器API。 服务器API不提供等效的标识和同意请求端点,因此这些方法会像发送Web SDK一样,将未经身份验证的请求发送到标准Edge Network端点。 SDK会为您选择端点。

方法
终结点
Authenticated
sendEvent
server.adobedc.net
是
getIdentity
在edgeDomain中设置的域
否
appendIdentityToUrl
在edgeDomain中设置的域(如果SDK需要请求标识)
否
setConsent
在edgeDomain中设置的域
否

当thirdPartyCookiesEnabled是true(默认)时,访客的第一个未经身份验证的请求将转至adobedc.demdex.net,而不是edgeDomain。

每个经过身份验证的请求包含以下标头:

  • Authorization: SDK使用您的凭据获得的访问令牌。
  • x-api-key:来自您的凭据的clientId。
  • x-gw-ims-org-id:您配置的orgId。

设置数据流访问类型 datastream-access-type

数据流具有​ 访问类型 ​设置,用于控制Edge Network是否接受未经身份验证的请求。 请参阅数据流指南中的配置高级选项。

  • 混合身份验证:同时接受经过身份验证的请求和未经过身份验证的请求。 如果您调用getIdentity、appendIdentityToUrl或setConsent,或者您的浏览器页面使用Web SDK将数据发送到相同的数据流,请使用此设置。
  • 仅验证:仅接受已验证的请求。 仅当使用此数据流只调用sendEvent时,才使用此设置。

在事件中包含主要身份 primary-identity

Edge Network无法从访客浏览器中针对服务器到服务器请求读取Cookie。 因此,服务器API收到的每个事件必须在事件的identityMap中包含主标识。 如果某个事件不包含某个事件,则Edge Network会拒绝该事件,并返回错误代码EXEG-0306-400。

await visitor.sendEvent({
  xdm: {
    eventType: "web.webpagedetails.pageViews",
    identityMap: {
      Email: [{ id: "visitor@example.com", primary: true }]
    }
  }
});

有关详细信息,请参阅xdm。

访问令牌缓存 token-caching

SDK在首次发送经过身份验证的请求时向Adobe Identity Management服务(IMS)请求访问令牌,而不是在您调用configure时请求。 然后,它会重用令牌,直到令牌过期前五分钟。 实例创建的每个forRequest句柄共享一个缓存的令牌。 顶级实例会单独缓存其自身的令牌,只有当您还直接从其中发送事件时,这一点才重要。 访问令牌的有效期约为24小时,因此繁忙的服务器每天会请求一次新令牌,而不是每位访客请求一次。

如果多个请求同时需要令牌,则它们共享单个令牌请求。 如果令牌请求失败(例如,由于客户端密钥错误),则触发该令牌的方法将拒绝并显示一个消息Failed to acquire an IMS access token包含的错误。

保护您的凭据 protect-credentials

客户端密钥授予对组织数据的访问权限。 请遵循以下惯例:

  • 将客户端ID、客户端密钥和范围存储在环境变量或密钥管理器中。 不要将它们提交到源代码管理。
  • 切勿将客户端密钥发送到浏览器。 仅在访客无法下载或检查的服务器代码中使用Server SDK。
  • 如果您认为客户端密钥已公开,请在Adobe Developer Console中轮换它。

SDK在其调试日志和getLibraryInfo返回的配置中编辑客户端密钥,并将其替换为[REDACTED]。

recommendation-more-help
experience-platform-help-collection