在Web小部件中启用经过身份验证的访问者(经典)

回到顶端

28日评论

  • 大卫Berumen

    你好,@……你能给我们提供一个完整的可下载的例子,这个主题与php。
    请。

    0
  • 戴夫·戴森

    你好大卫,

    您看到上面PHP部分中的下载链接了吗?PHP

    0
  • 大卫Berumen

    你好,@……

    是的,我现在很困惑,我做了所有的步骤,但还是不行。所以请求下载,我想这对大家都有帮助。

    0
  • 戴夫·戴森

    @……下面是上面的链接:PHP-JWT

    0
  • 安德鲁•里德

    白木Shokrizadeh谢谢你的指导。在实现所描述的更改之后,我们遇到了一些奇怪的行为。用户似乎通过了身份验证,并按照预期看到了其只读配置文件信息。然而,当点击“开始聊天”按钮时,显示以下错误信息:

    在浏览器中没有可见的网络或控制台错误,并且当' webWidget.authentication.chat. net '中的逻辑。删除jwtFn '后,未经身份验证的聊天将按预期工作。任何关于如何解决这个问题的见解将非常感激!

    编辑:
    我见过这篇文章对这条错误信息和已确认的2个原因确定有不适用在这里。

    0
  • 白木Shokrizadeh
    亚博Zendesk产品经理

    安德鲁•里德感谢您让我们知道您所遇到的问题。你能不能联系我们的辩护团队提供小部件所在位置的链接,并对访问者进行身份验证,这样我们就可以看看您的实现情况如何?

    0
  • 安德鲁•里德

    谢谢白木Shokrizadeh!我们能够找出问题所在。如果对其他人有帮助,在添加身份验证逻辑时,我们忘记删除识别的命令.删除它之后,经过身份验证的用户可以毫无问题地开始聊天。

    0
  • 时间长

    我想问一下如何不断调用jwtFn方法来更新令牌
    这是我初始化它时添加的代码
    我是一个单页应用程序,我如何通过登录后调用jwtFn方法来做到这一点。

    0
  • 小布埃纳维斯塔DJ
    亚博Zendesk客户服务
    大家好,

    感谢您联系Zendesk支持。亚博

    关于您的问题,您是否能够检查上面提供的JTW令牌方法示例?在上面的示例中,为了多次调用jtwFn,您需要使用下面的行。

    jwtFn:函数(回调){
    fetch(“JWT_TOKEN_ENDPOINT”)(函数(res) {
    res.text(),然后(函数(jwt) {
    回调(jwt);

    谢谢大家,祝你们度过美好的一天!


    亲切的问候,

    0
  • Espartan代码

    我在哪里可以找到一个javascript的例子来验证用户在聊天中我仍然在周围的答案,给我一个例子

    0
  • 亚历山德罗Battistini

    嗨,Espartan Code,

    你可以在下面的部分看到这篇文章的例子:

    使用带有' webWidget.authentication.chat '密钥的zessetting Javascript API。jwtFn '提供一个函数,该函数在每次调用JWT时提供一个新的JWT。下面是一个代码示例:

    窗口。zessettings = {webWidget: {authenticate: {chat: {jwtFn: function(callback) {fetch('JWT_TOKEN_ENDPOINT').then(function(res) {res.text().then(function(jwt) {callback(jwt);});});}}}}};
    0
  • Wedy Chainy

    你好,

    我们有一个JWT_TOKEN_ENDPOINT应该是什么样的例子吗?
    我是后是否POST或GET ?

    响应是什么样子的,例如JSON还是文本?什么内容类型?

    谢谢你!

    0
  • Tim O’mahony

    Wedy Chainy问题:

    在“创建JWT令牌”中,它显示了一个片段
    窗口。zessettings = {webWidget: {authenticate: {chat: {jwtFn: function(callback) {fetch('JWT_TOKEN_ENDPOINT').then(function(res) {res.text().then(function(jwt) {callback(jwt);});});}}}}};
    但是没有解释什么是jwt_token_endpoint,这里的期望是POST / GET吗?请求内容类型是什么,响应内容类型是什么,期望的响应是什么样的?如果有人以前做过这个/例子,这里的任何指针将是伟大的!
    0
  • Dainne Lucena
    亚博Zendesk客户服务

    Wedy Chainy&Tim O’mahony

    这个文档实际上是为了传递给你团队的开发人员,因为这不是初学者文档,因为它需要编程技能。请放心,如果这是转发给开发人员,他们就有他们需要的一切。

    但要澄清的是,即使我们“取回”,这仅仅意味着令牌可以由Javascript函数返回,也可以由外部页面返回,其代码逻辑写在文档中

    在上面的示例中,JWT_TOKEN_ENDPOINT是一个端点,可以在您自己的服务器上实现,以获取新的JWT


    Fetch的意思是,总是某种“GET”方法,但这里HTTP请求方法(GET、POST、PUT和DELETE)不相关,因为Fetch是JavaScript中的方法https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch

    这也与内容类型无关,因为我们期望JWT_TOKEN_ENDPOINT在调用它时返回令牌字符串。

    JWT令牌字符串看起来像这样

    例:
    以下是我同事使用PHP和Firebase实现的2个截图

    获取端点:

    JWT生成:
    希望这对你有帮助!

    0
  • 吉米·麦克德莫特

    嗨!这很有帮助,谢谢。如果用户的external_id已经作为最终用户在Zendesk系统中,那么有两个问题:亚博

    1.它会重新创建用户吗?(我猜不是)

    2.这是否允许用户接收限定在用户标签和用户段范围内的文章?

    谢谢!

    0
  • ВячеславМедведевских

    嘿!

    我们能用JWT把客户的电话号码发送给Zendesk吗?亚博

    我们的员工使用Zendesk接听电话亚博,但通话记录与聊天记录是分开存储的,因为“聊天客户端”和“呼叫客户端”是两个不同的实体。
    我们需要Zend亚博esk了解现在打电话的人和5分钟前聊天的人是同一个客户。
    在这种情况下,我们认为通话记录和聊天记录将绑定到同一个实体,我们的员工将使用单一的通信记录。

    1
  • Fellipe M。
    亚博Zendesk客户服务
    嗨Вячеслав,

    根据文章解析JWT请求,是有可能通过的电话号码是JWT请求。您只需要确保电话号码是所描述的可接受的格式在这里
    如果您有任何困难,请随时与支持团队联系,我们将很乐意为您提供进一步的帮助。

    最好的
    0
  • 帕维尔的地理

    嗨!

    有以下错误

    发送的JWT令牌看起来不错

    不理解错误消息,看起来像一个问题,您应该已经有了您的bcs秘密令牌。你知道问题出在哪里吗?

    谢谢你!

    0
  • 杰夫C
    亚博Zendesk客户服务

    嘿,帕维尔,

    请再次确认您是否使用的是聊天仪表板中的共享密钥,而不是Web Widget设置中的共享密钥?这是一个常见的问题,即使用的共享密钥不正确。

    如果您确认正在使用聊天共享密钥,并尝试重新生成一个新密钥,但仍然不起作用,请通过消息传递或选项2与我们联系在这里所以我们可以进一步帮助你。

    0
  • Marcin Wolniewicz

    嗨!我在努力让这一切顺利进行。我可以看到聊天正在向我的端点发出一个请求,但没有发出另一个请求。在Agent视图中也没有用户详细信息或验证。算法需要是HS256吗?我在你的其他指南中找到了这些信息,但不是在这里,所以我有点困惑:https://support.亚博zendesk.com/hc/en-us/articles/4408836328346

    有什么办法解决这个问题吗?也许解码/编码有一些问题?

    编辑:在将算法更改为HS256后,我的问题得到了修复,添加了“type”:“JWT”标头并解析了“external_id”到字符串(我之前将其作为数字发送)。不确定这些变化中哪一个起了作用,因为我同时发布了这三个,但现在它可以工作了

    0
  • 凯文·金

    您好,我看到当我们使用新的Messaging API对用户进行身份验证时,用户的external_id将显示在他们的配置文件上https://developer.亚博zendesk.com/documentation/zendesk-web-widget-sdks/sdks/web/enabling_auth_visitors/

    但是,当我通过Classic SDK对用户进行身份验证时,虽然我们获得了用户的电子邮件和姓名,但却找不到我们提供的用于获取JWT令牌的external_id。是否有办法以某种方式获得外部ID ?

    0
  • 后面瞎跑Mukhrjee

    ***急需帮助***

    你好,试图在javascript上实现Zendesk小部件在我亚博的应用程序与身份验证。

    返回JWT的API正在被正确调用,因为我可以从JS中看到。

    返回的JWT如下:-

    但是当小部件试图调用zendesk时,我一直在浏览器的网络选项卡上得到以下错误。亚博任何帮助都是感激的。

    “成功”:假的,
    "error": "failed to validate claims"
    这是javascript:-
    <脚本type = " text / javascript”>
    窗口。zessettings = {
    webWidget: {
    验证:{
    聊天:{
    jwtFn:函数(回调){
    fetch(“/国防部/亚博 zendesk / jwt”),然后(函数(res) {
    res.text(),然后(函数(jwt) {
    回调(jwt);
    });
    });




    };
    > < /脚本
    0
  • 维克多Osetrov
    嗨后面瞎跑,

    谢谢你的问题。

    400个错误请求或未能验证索赔错误的问题似乎与您的值有关。
    请确保您正在使用秒(不是毫秒)对于这两个iat经验值。

    iat经验值:当前时间戳的整数值秒。
    某些特定语言中的函数(例如JavaScript的Date.now())返回毫秒,因此请确保转换为秒。

    希望能有所帮助
    0
  • 后面瞎跑Mukhrjee

    谢谢维克多Osetrov感谢您的及时回复。所以我使用JAVA rest API来生成JWT,我在下面使用以秒为单位生成时间。有什么想法吗,如果你还能想到什么问题呢?

    还要补充的是,我尝试过使用和不使用base64编码的秘密,相同的错误消息。

    我仍然没有包括“jti”作为索赔的一部分,因为我读了一些文件。

    请建议。

    .getEpochSecond java.time.Instant.now () ()
    0
  • 维克多Osetrov
    嗨后面瞎跑,

    谢谢你的快速回复。我仍然认为这个问题与价值观有关。
    请您检查一下好吗?“名称”“电子邮件”?

    看起来你使用了两次相同的值:

    希望能有所帮助,

    0
  • 后面瞎跑Mukhrjee

    维克多Osetrov谢谢你回答我的问题。请参阅下面我更新的JWT有效载荷,我有不同的名字和电子邮件。只是重新迭代,我试过使用秘密作为Base64编码,没有它,继续得到

    "error": "验证声明失败"。你还能想到别的吗?
    非常感谢您的持续帮助,我提前感谢您。

    0
  • 雷米Saumet
    亚博Zendesk客户服务

    美好的一天,后面瞎跑Mukhrjee

    感谢您一直以来对这件事的耐心,希望您今天一切顺利!

    为了回答这个问题,您不能使用不打算用于登录端点的属性,因为我们在后端有某种JWT的模型验证器。

    因此,根据您的屏幕截图,属性不是所提供示例的一部分将使您的有效负载无效。

    请记住,对于JS或任何编程语言,要尊重所提供的示例:

    name: '#{customerName}', email: '#{customerEmail}', iat: #{时间戳},external_id: '#{externalId}'

    我个人将其用于PhP,以下是我如何构建有效负载:

    而且它很有魔力!

    • 一个有效的JWT负载的例子:
    eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoiUmVtaSBTYXVtZXQiLCJlbWFpbCI6InJzYXVtZXRfemVuZGVza0BvdXRsb29rLmNvbSIsImlhdCI6MTY2ODQyMjczMCwiZXh0ZXJuYWxfaWQiOiI4In0.4u9HZPEeVdA11_lIdYGdCvne0uTMGcDsvC_UnrpLXQQ



    PS:记住external_id属性:

    一旦为客户设置了该值,就不能更改。我们建议您在此字段中使用系统的唯一用户id。例如user-123456

    希望这能澄清它!祝你今天过得愉快。

    最好的问候,

    0
  • 站长groupgia

    你好,早上好。

    我试图将所有信息发送到聊天,但它不起作用,我从另一台计算机访问内部网,历史显示为空,开始新的对话

    代码如下:

    窗口。zessettings = {
    webWidget: {
    验证:{
    聊天:{
    jwtFn:函数(回调){
    fetch (localStorage [" ChatToken "]),然后(函数(res) {
    res.text(),然后(函数(jwt) {
    回调(jwt);
    });
    });




    };



    服务器上的代码如下:

    $payload = [
    'name' => $nombrecliente,
    'email' => $email;
    'external_id' => $ID,
    'iat' => time(),
    'nbf' => 1357000000
    ];

    $key = '**';


    / * *
    *重要:
    你必须为你的应用程序指定支持的算法。看到
    * https://tools.ietf.org/html/draft-ietf-jose-json-web-algorithms-40
    *查看符合规范的算法列表。
    * /
    $jwt = jwt::encode($payload, $key, 'HS256');

    这应该使我们的客户在访问内部网时看到他的聊天记录,对吗?

    0

登录留下评论。

由Zendesk提供支亚博持