[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开发人员和用户。 然后完成以下步骤:
-
登录到Adobe Developer Console并选择您的组织。
-
导航到 项目 并选择现有项目,或创建一个新项目。
-
将 Experience Platform API 添加到项目中,并选择 OAuth服务器到服务器 作为身份验证类型。
-
为凭据选择产品配置文件。
-
在凭据的页面上,复制以下值:
- 客户端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会为您选择端点。
当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]。