在本教程中,您将使用JSON Web令牌(JWTs)来验证来自ZIS集成的请求。作为本教程的一部分,您将创建ZIS集成和中间件服务。

您创建的集成将监听创建票务评论事件在Zendesk亚博。当它检测到事件时,集成的ZIS流将包含事件数据的POST请求发送到中间件。

控件中包含一个ZIS JWTX-ZIS-Authorization头。中间件验证这个JWT以确保请求是合法的。如果是,中间件将请求传递给外部目标。该目标表示一个外部应用程序。

在本教程中,您将使用AWS Lambda函数作为中间件服务。在生产环境中,您可以使用任何可以处理HTTP请求和验证jwt的服务或技术堆栈。

免责声明Ze亚博ndesk提供本文仅用于指导目的。亚博Zendesk不支持第三方服务,比如AWS。

你需要什么?

要完成本教程,您需要以下内容:

创建AWS Lambda函数

首先,创建一个名为“zis_jwt_example”的AWS Lambda函数。该函数将运行Node.js代码并拥有一个函数URL。稍后,您将使用URL从ZIS流调用该函数。

  1. 登录您的AWS账户并打开功能Lambda控制台的。

  2. 功能页面,点击创建函数

  3. 创建函数页,做以下工作:

    • 输入一个函数名“zis_jwt_example”
    • 选择一个运行时“Node.js 18.x”
    • 高级设置中,选择启用功能URL.下身份验证类型中,选择没有一个

    保持其他设置不变。

  4. 点击创建函数

  5. 保存结果函数地址.您将在本教程后面使用此URL。

上传Lambda函数的代码

接下来,创建并上传调用Lambda函数时运行的Node.js代码。您上传的代码必须包含任何依赖项。

  1. 在您的计算机上创建一个名为zis_jwt_example

                   
    mkdir zis_example_jwt
  2. 在您的shell中,导航到zis_example_jwt目录中。

                   
    cd zis_example_jwt
  3. 在该目录下,使用以下命令创建一个新的npm包。

                   
    NPM init -y
  4. Lambda函数的代码有两个依赖项:jsonwebtokenaxios.您需要将这些软件包安装到zis_jwt_example目录中。

    使用npm安装jsonwebtoken包。

                   
    安装jsonwebtoken
  5. 使用npm安装axios包。

                   
    NPM安装axios
  6. 创建一个JavaScript文件index.js

                   
    触摸index.js
  7. 将以下代码添加到index.js.在代码中,替换为:

    • “ZIS_JWT_PUBLIC_KEY”,其中包含您在执行命令时收到的JWT公钥注册了ZIS集成
    • 将“EXTERNAL_TARGET_URL”替换为RequestBin端点URL
                   
    常量jwt需要“jsonwebtoken”常量axios需要“axios”//替换为集成的JWT公钥和RequestBin端点URL常量jwtPublicKey“ZIS_JWT_PUBLIC_KEY”常量externalTargetURL“EXTERNAL_TARGET_URL”出口处理程序事件上下文=>//验证JWT常量令牌事件“x-zis-authorization”]常量关键缓冲jwtPublicKey“base64”toString“utf - 8”控制台日志收到令牌:$ {令牌}关键:$ {关键}jwt验证令牌关键“RS256”函数犯错_如果犯错控制台日志错误:“犯错常量响应statusCode401身体JSONstringify“JWT无效”}返回响应}//解析输入常量输入JSON解析事件身体控制台日志输入:“输入//发送请求到外部目标如果输入axios帖子externalTargetURL输入然后响应=>控制台日志"请求已发送:"+响应数据上下文成功"请求已发送:"+响应数据}错误=>控制台错误“失败:“+错误上下文失败“失败:“+错误}}}}

    当一个ZIS流向非zendesk URL发出请求时,ZIS将JWT包含在亚博X-ZIS-Authorization请求头。这段代码从报头检索并解码JWT。然后,代码使用集成的JWT公钥验证JWT。如果成功,代码就会将请求的主体发送到RequestBin端点URL。

  8. 使用以下命令压缩zis_jwt_example目录的内容放入一个ZIP文件。

                   
    -r function.zip。

    该命令创建一个functions.zip存档于zis_jwt_example目录中。

  9. 在Lambda函数的页面上,单击上传的并选择. zip文件

  10. 点击上传

  11. zis_jwt_example目录,选择functions.zip在步骤8中创建的文件。

  12. 点击保存

创建集成

接下来,创建一个ZIS集成,该集成在检测到Ticket Comment Created事件时调用Lambda函数URL。

  1. 创建一个JSON文件my_zis_bundle.json

  2. 将以下包骨架添加到my_zis_bundle.json

                   
    “名称”“示例ZIS集成与JWT验证”“描述”“添加评论时将帖子发送到AWS Lambda函数”“zis_template_version”“2019-10-14”“亚博电脑端资源”“PostToLambda”“_placeholder_”"ZIS自定义动作定义在这里"}“TicketCommentAddedFlow”“_placeholder_”“ZIS流到这里”}“TicketCommentAddedJobSpec”“_placeholder_”“ZIS的工作说明书在这里”}}}

    在接下来的步骤中,您将定义自定义操作、ZIS流和作业规范。

  3. my_zis_bundle.json,替换PostToLambda具有以下自定义操作定义的占位符。在定义中,将“AWS_LAMBDA_FUNCTION_URL”替换为前面创建的Lambda函数URL。

                   
    “PostToLambda”“类型”“子::行动::Http”“属性”“名称”“PostToLambda”“定义”“方法”“职位”“url”“AWS_LAMBDA_FUNCTION_URL”“requestBody”“ticket_id美元。”“.ticket_id美元”“comment_body美元。”“.comment_body美元”}}}}

    当调用时,自定义动作将POST请求发送到AWS Lambda函数的API端点。请求正文包含来自Zendesk票证的注释。亚博

  4. 取代TicketCommentAddedFlow占位符,具有以下ZIS流定义。在定义中,将“INTEGRATION”替换为您的集成键。

                   
    “TicketCommentAddedFlow”“类型”“子:流”“属性”“名称”“TicketCommentAddedFlow”“定义”“StartAt”“PostTicketUpdate”“州”“PostTicketUpdate”“类型”“行动”“ActionName”“子:集成:行动:PostToLambda”“参数”“ticket_id美元。”“.input.ticket_event.ticket.id美元”“comment_body美元。”“.input.ticket_event.comment.body美元”}“结束”真正的}}}}}

    流包含一个Action状态。该状态调用您在前一步中定义的自定义操作。

  5. 取代TicketCommentAddedJobSpec具有以下职位说明定义的占位符。在定义中,将“INTEGRATION”替换为您的集成键。

                   
    “TicketCommentAddedJobSpec”“类型”“子::JobSpec”“属性”“名称”“TicketCommentAddedJobSpec”“event_source”“支持”“event_type””票。CommentAdded”“flow_name”“子:集成:流:TicketCommentAddedFlow”}}

    作业规范告诉ZIS在检测到一个表扬创建事件时运行ZIS流。

  6. 保存my_zis_bundle.json.文件现在看起来应该是这样的:

                   
    “名称”“示例ZIS集成与JWT验证”“描述”“添加评论时将帖子发送到AWS Lambda函数”“zis_template_version”“2019-10-14”“亚博电脑端资源”“PostToLambda”“类型”“子::行动::Http”“属性”“名称”“PostToLambda”“定义”“方法”“职位”“url”“AWS_LAMBDA_FUNCTION_URL”“requestBody”“ticket_id美元。”“.ticket_id美元”“comment_body美元。”“.comment_body美元”}}}}“TicketCommentAddedFlow”“类型”“子:流”“属性”“名称”“TicketCommentAddedFlow”“定义”“StartAt”“PostTicketUpdate”“州”“PostTicketUpdate”“类型”“行动”“ActionName”“子:集成:行动:PostToLambda”“参数”“ticket_id美元。”“.input.ticket_event.ticket.id美元”“comment_body美元。”“.input.ticket_event.comment.body美元”}“结束”真正的}}}}}“TicketCommentAddedJobSpec”“类型”“子::JobSpec”“属性”“名称”“TicketCommentAddedJobSpec”“event_source”“支持”“event_type””票。CommentAdded”“flow_name”“子:集成:流:TicketCommentAddedFlow”}}}}
  7. 将包上传到ZIS。

                   
    curl -X POST https://{subdomain}.亚博zendesk.com/api/services/zis/registry/{integration}/bundles \-u {email}:{password} \-H "Content-Type: application/json" \- d @my_zis_bundle.json
  8. 安装作业规范以启用集成。

                   
    curl -X POST "https://{subdomain}.亚博zendesk.com/api/services/zis/registry/job_specs/install?job_spec_name=zis:{integration}:job_spec:TicketCommentAddedJobSpec" \密码- u {email}: {}

测试集成

要测试集成和中间件,请使用以下请求创建带有comment.body

             
curl -X POST https://{subdomain}.亚博zendesk.com/api/v2/tickets.json \-u {email}:{password} \-H "Content-Type: application/json" \- d”{“票”:{“主题”:“我的打印机着火了!”"评论":{“身体”:“烟很鲜艳。”}}} '

导航到RequestBin指示板。您应该看到一个带有票据id和注释的JSON有效负载。这可能需要几分钟。

恭喜你!您已经使用jwt来验证来自ZIS集成的请求。有关ZIS集成的另一个示例,请参阅亚博Zendesk应用程序作为管理界面教程系列。