配置身份验证设置
Customer Service 全渠道提供了一套功能,扩展了 Dynamics 365 Customer Service Enterprise 的能力,使组织能够通过数字消息传递渠道与客户即时联系和互动。 访问 Customer Service 全渠道需要额外的许可证。 有关详细信息,请参见 Dynamics 365 Customer Service 定价概述和 Dynamics 365 Customer Service 定价计划页面。
适用于:Dynamics 365 Contact Center—嵌入、Dynamics 365 Contact Center—独立 和 Dynamics 365 Customer Service
您可以创建身份验证设置来验证从域登录的客户,并根据定义的上下文变量提取信息。 您可以将匿名客户与经过身份验证的客户区分开来,并可以根据上下文变量创建规则。
例如,您可以为匿名客户和经过身份验证的客户设置单独的队列。 由于您有有关经过身份验证的客户的更多信息,您还可以根据特定变量设置客户优先级,如购物车值或权限状态。
创建身份验证设置记录后,您必须将其添加到工作流的渠道设置中的渠道实例以使其正常工作。 这些渠道支持身份验证:
- 聊天
- Apple Messages for Business
为了指示客户是否经过身份验证,客户服务代表(服务代表或代表)会在对话摘要部分收到通知。 根据客户的身份验证状态,已经过身份验证字段设置为是或否。 有关详细信息,请参阅对话摘要。
先决条件
- 确保组织具有 OAuth 2.0 和 JSON Web 令牌 (JWT) 的应用知识。
- 验证您是否对安全列具有权限。 有关详细信息,请参阅配置访问安全列的权限。
为聊天创建身份验证设置记录
您可以在管理应用中创建聊天身份验证设置记录。
在 Customer Service 管理中心的站点地图中,在客户支持中选择客户设置。 客户设置页面将显示。
在身份验证设置部分,选择管理。 身份验证设置页面将显示。
选择新身份验证设置,然后在添加身份验证设置页面上提供以下详细信息:
名称:输入身份验证设置的名称。
负责人:接受默认值或将其更改为所需值。
身份验证类型:默认情况下,OAuth 2.0 无法编辑。
公钥 URL:指定域的公钥 URL。 此 URL 用于验证来自客户所登录的域的 JavaScript 对象表示法 (JSON) Web 令牌 (JWT) 的信息。
JavaScript 客户端函数:指定用于身份验证的 JavaScript 客户端函数。 此函数从令牌终结点提取令牌。
有关如何查找公钥 URL 和 JavaScript 客户端函数的详细信息,请参阅本文后面的 Power Apps 门户的设置或自定义门户的设置部分。
选择保存。
使用 OAuth 2.0 为聊天创建身份验证设置记录
执行为聊天创建身份验证设置记录中的步骤 1 至 3,然后在添加身份验证设置页面上输入以下详细信息:
- 名称:身份验证设置的名称。
- 渠道类型:实时聊天。
- 身份验证类型:OAuth 2.0
选择下一步,然后在详细信息页面上输入以下信息:
- 令牌自定义操作:用于验证标识提供者提供的令牌并返回经过身份验证用户的用户 ID 的自定义代码引用。
- 令牌 URL:用于交换传递到自定义操作的令牌的授权代码以获取用户 ID 的 URL。
- 重定向 URL:传递到原始授权代码请求的 URL,这是调用令牌交换终结点时的必需参数。
- 客户端 ID:传递到令牌交换终结点的客户端 ID。
- 客户端密码:对传递到令牌交换终结点的客户端进行身份验证的密码。
- 范围:通过在流中获取的令牌向用户授权的范围。
保存更改。
向聊天小组件添加身份验证
在 Customer Service 管理中心中,编辑工作流程设置中的聊天小组件,然后转到行为选项卡。
在身份验证设置框中,浏览并选择聊天身份验证记录。
在门户中的已登录客户打开聊天小组件时,JavaScript 客户端函数会将 JWT 从客户端传送到服务器。 JWT 使用公钥解密和验证,信息随后被传递到 Customer Service 全渠道中的聊天代表。 作为管理员,您还可以通过定义自定义上下文变量传递有关 JWT 中已登录客户的其他信息。 必须准确定义上下文变量,因为它们在与聊天小组件关联的工作流程中。 有关详细信息,请参阅管理上下文变量。
设置 Power Apps 门户
如果您在使用 Power Apps 门户开发的网站上为聊天小组件添加身份验证,公钥 URL 和 JavaScript 客户端函数是现成可用的。 您需要上传自定义证书,以在 Power Apps 门户上获取有效的公钥 URL。
-
公钥 URL:
<portal_base_URL>/_services/auth/publickey
-
JavaScript 客户端函数:
auth.getAuthenticationToken
对于现成的 Power Apps 门户,javascript 客户端函数返回一个令牌,默认情况下,该令牌具有将联系人记录链接到对话的正确声明。 此令牌包含带有登录用户联系人 ID 的子声明。 此子声明为全渠道提供了一个唯一标识符,以从 Dataverse 环境中自动识别和链接联系人记录。 在下一节的表格中了解更多信息。
自定义门户设置
如果您将已经过身份验证的聊天体验添加到使用 Power Apps 门户开发的自定义网站,您的 Web 开发团队必须执行以下步骤,您的管理员才能配置经过身份验证的聊天:
在其身份验证服务器中生成公钥/私钥对。 密钥必须使用 RSA256 算法生成。
以下示例代码用于生成私钥或公钥对。
openssl genpkey -algorithm RSA -out private_key.pem -pkeyopt rsa_keygen_bits:2048 openssl rsa -pubout -in private_key.pem -out public_key.pem
创建返回您的公钥的终结点。 全渠道服务器使用公钥验证作为授权聊天请求的一部分传递的 JWT 令牌。 在创建身份验证设置记录时,您将在管理应用中输入此终结点的 URL。
公钥终结点看上去类似于此示例:
-----BEGIN PUBLIC KEY----- NIIBIjANBgkqhkiG9w0BAQEFABCOPQ8AMIIBCgKCAQEAn+BjbrY5yhSpLjcV3seP mNvAvtQ/zLwkjCbpc8c0xVUOzEdH8tq4fPi/X5P/Uf2CJomWjdOf1wffmOZjFasx ELG+poTqy5uX2dNhH6lOMUsV31QGG36skLivpLBCSK6lWlzsV6WGkb/m8r86aGzp jtNhw8yvoTYB4updDrJ8pC+tx4EWK0WEmKn1GsW6TjUtxJjcTLI1puSbmcGHbkSi RSbWkKPqaEVFALprw+W5ZCung5QX3KOkY/rJd+2JwULm7okyQCQaF7qwa5i9Uf65 7M6ZL4vsDevq7E/v3tf6qxpSSHzt4XspXVQty9QHhqDqBEY3PfI4L2JjgIGuPhfS YQIDAQAB -----END PUBLIC KEY-----
如果您需要使用多个公钥,您的公钥终结点可以返回一组 <kid, publickey>
对,其中 kid
是指密钥 ID。 密钥 ID 对必须是唯一的。 在步骤 4 中,需要在 JWT 令牌中传递 kid。 如果您使用多个密钥,您的公钥终结点应该会返回类似于以下示例的内容。 公钥采用 Base64 编码。
[
{
"kid": "qWO4EaKT1xRO7JC/oqALz6DCVr41B/qL0Hqp4in7hu4=",
"publicKey": LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0NCk1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBbjFLdXhtSEh3V3hjelZSWGRBVmMNCnBEaFZwa0FnYklhTGZBUWc1bFpvemZqc29vcWRGWkl0VlFMdmRERWFVeDNqTytrTkxZM0JFRnBYVDZTN3ZNZCsNCnZoM2hpMDNsQ1dINnNCTWtaSWtuUUliMnFpekFsT0diU2EvK3JrUElnYnpXQjRpT1QyWVhyOVB4bXR5d2o4WUINCnYram55VU5DSzMyZy9FYWsvM0k3YW1vZ2pJY0JISjNFTjVuQWJBMExVVnJwMW5DODJmeEVPOHNJTzNYdjlWNVUNCnc5QnVTVVFRSmtMejNQYVI5WTdRZUEyNW5LUGtqTXZ2Y0UxVU5oeVpIYlNLbmorSitkZmFjb1hsSGtyMEdGTXYNCldkSDZqR0pWcGNQMHBkNjFOa3JKa2c0aStheThwS2ZqdjNUOHN3NWdaVHFweFFaaitVRWxqaVM0SHRPTlhkNlENCnZRSURBUUFCDQotLS0tLUVORCBQVUJMSUMgS0VZLS0tLS0NCg==",
"expiry": 1608495423
},
{
"kid": "qWO4EaKT1xRO7JC/oqALz6DCVr41B/qL0Hqp__valid=",
"publicKey": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0NCk1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBbjFLdXhtSEh3V3hjelZSWGRBVmMNCnBEaFZwa0FnYklhTGZBUWc1bFpvemZqc29vcWRGWkl0VlFMdmRERWFVeDNqTytrTkxZM0JFRnBYVDZTN3ZNZCsNCnZoM2hpMDNsQ1dINnNCTWtaSWtuUUliMnFpekFsT0diU2EvK3JrUElnYnpXQjRpT1QyWVhyOVB4bXR5d2o4WUINCnYram55VU5DSzMyZy9FYWsvM0k3YW1vZ2pJY0JISjNFTjVuQWJBMExVVnJwMW5DODJmeEVPOHNJTzNYdjlWNVUNCnc5QnVTVVFRSmtMejNQYVI5WTdRZUEyNW5LUGtqTXZ2Y0UxVU5oeVpIYlNLbmorSitkZmFjb1hsSGtyMEdGTXYNCldkSDZqR0pWcGNQMHBkNjFOa3JKa2c0aStheThwS2ZqdjNUOHN3NWdaVHFweFFaaitVRWxqaVM0SHRPTlhkNlENCnZRSURBUUFCDQotLS0tLUVORCBQVUJMSUMgS0VZLS0tLS0NCg==",
"expiry": 1608495423
}
]
您需要一个服务来生成 JWT 以在开始经过身份验证用户的聊天过程中发送到全渠道服务器。
a. JWT 标头看起来类似于以下示例。
{ "alg": "RS256", "typ": "JWT", }
如果您使用多个公钥,则需要传入密钥 ID (kid)。 您的标头看起来类似于以下示例:
{ "alg": "RS256", "typ": "JWT", "kid": "qWO4EaKT1xRO7JC/oqALz6DCVr41B/qL0Hqp4in7hu4=" }
b. JWT 有效负载应包括:
至少包括以下声明:
声明 定义 iss 令牌的发放者。 iat 发放令牌的日期,数字日期格式。 exp 此令牌的到期日期,数字日期格式。 sub 声明的主题。
注意:我们建议您为登录用户在 Customer Service 中传递联系人或客户记录的 GUID。 此 GUID 用于标识联系人记录并将其链接到对话。 记录搜索可识别具有联系人或客户的可用状态代码的记录。 如果使用自定义状态代码,则记录标识不起作用。lwicontexts 作为对话的一部分传入的上下文变量,用于传递目的或显示给代表。
详情请参阅
管理自定义上下文
setAuthTokenProvider 方法
使用上下文变量自动标识记录您要传递的任何其他数据。
您的有效负载看起来应类似于以下示例:
{ "sub" : "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb", "lwicontexts" :"{\"msdyn_cartvalue\":\"10000\", \"msdyn_isvip\":\"false\", \"portalcontactid\":\"aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb\"}", "iat" : 1542622071, "iss" : "contosohelp.com", "exp" : 1542625672, "nbf" : 1542622072 }
c. JWT 签名应该由您的私钥签署。
备注
- 如果令牌已过期或无效,聊天小组件会引发错误事件。
- 经过身份验证的聊天不支持 setContextProvider 方法。 您应该作为 JWT 有效负载的一部分传入您的 lwicontext。
在您的网站上创建一个 JavaScript 函数,用于接受回调函数并将 JWT 返回到回调函数。 为了避免超时,此 JavaScript 函数应在 10 秒内返回 JWT。 此 JWT 必须满足以下条件:
它必须包含步骤 3 中的标头、有效负载和签名。
它必须由步骤 1 中密钥对中的私钥签名。
我们建议在 Web 服务器上生成 JWT。
此 JavaScript 方法的名称用于在 Customer Service 管理应用中创建身份验证设置记录。
// This is a sample JavaScript client function auth.getAuthenticationToken = function(callback){ var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { callback(xhttp.responseText); } }; xhttp.onerror = function(error) { callback(null); }; //Replace this with a call to your token generating service xhttp.open("GET", "https://contosohelp.com/token", true); xhttp.send(); }
您的开发人员需要与您的全渠道管理员共享以下信息:
a. 步骤 2 中公钥服务的 URL。
示例: https://www.contoso.com/auth/publickey
b. 步骤 4 中 JavaScript 客户端函数的名称。 实时聊天小组件在聊天开始过程中在内部调用此名称。
示例:auth.getAuthenticationToken
备注
如果在对用户进行身份验证之前,您的用户体验会显示聊天按钮,请确保根据需要将用户重定向到身份验证页。 您可以在步骤 4 中的方法中或作为用户流的早期步骤设置重定向。
下图介绍了设置。
然后,您可以按照以下步骤设置经过身份验证的聊天:
设置经过身份验证的聊天
转到管理应用,然后使用上一部分的步骤 5 中的信息创建身份验证设置记录。 有关详细信息,请参阅为聊天创建身份验证设置记录。
将身份验证设置与聊天小组件关联将提供经过身份验证的体验。 有关详细信息,请参阅向聊天小组件添加身份验证。
下图介绍了用户在经过身份验证的设置中访问您的聊天时的调用序列。
为 Apple Messages for Business 创建身份验证设置
先决条件
配置身份验证设置的管理员需要更多安全权限。 有关详细信息,请参阅设置字段的安全权限。
确保您的组织有 OAuth 2.0 OpenID Connect 流的工作知识。 将在下一部分中概述相关步骤。
确认您的组织至少有一个 Apple Messages for Business 身份验证类型丰富消息。 安装时需要此丰富的消息配置。
使用 OAuth 2.0 OpenID Connect 流为 Apple Messages for Business 创建身份验证设置记录
在 Customer Service 管理中心站点地图中,选择客户设置,然后选择管理身份验证设置。 显示现有身份验证设置的列表。
选择新的身份验证设置,在添加身份验证设置页上,提供以下详细信息:
在渠道类型页面中,输入名称,然后选择 Apple Messages for Business 作为渠道类型。
更改身份验证类型 OAuth 2.0 OpenID Connect 流。
在添加身份验证设置页上,提供以下信息:
-
客户端 ID:提供由授权服务器签发的 OAuth 2.0 客户端标识符。
-
客户端密码:用于验证发送到授权服务器的请求的客户端密码。
-
范围:添加的每个范围均可指定您向客户请求的用户数据片段。 范围内容必须与通过服务提供商提供的内容完全匹配。
- 访问令牌 URL:可在其中请求访问令牌的服务提供程序的终结点。
-
解密的令牌 URL:OAuth 2.0 API 可以在其中检索范围内请求的客户信息的终结点。
- 其他参数:允许身份验证服务通过请求获得额外的参数。
-
客户端 ID:提供由授权服务器签发的 OAuth 2.0 客户端标识符。
在其他详细信息页面上,您可以选择定义访问令牌过期时间(以秒为单位)。 默认过期时间为一小时。
指定的时间过后,在之前经过身份验证的对话中的客户摘要部分中,已经过身份验证字段会更改为否。在丰富消息页面上,选择添加,然后选择一个或多个要与此身份验证设置关联的丰富消息。
查看摘要页面,然后选择下一步。 身份验证设置已配置。
在重定向信息页上,复制 URL。 将此 URL 添加到身份验证服务提供程序的网站的允许回调 URL 下。
选择完成。
向 Apple Messages for Business 渠道添加身份验证
打开包含要向其中添加身份验证的渠道实例的工作流程。
在渠道设置的行为页面上,导航到身份验证设置,启用该功能,然后从下拉菜单中选择正确设置。 有关详细信息,请参阅配置 Apple Messages for Business 渠道。
若要查看或更新每个渠道实例的身份验证设置,请选择编辑。
相关信息
添加聊天小组件
配置对话前调查
创建快速回复
创建和管理工作时间
在 Power Apps 门户中嵌入聊天小组件
自动识别客户