如何使用自定义API密钥验证Zoho Desk扩展发起的调用
Zoho Desk扩展自定义Connection配置后请求头未携带API密钥问题
我正在开发Zoho Desk扩展,计划将自有应用与Zoho Desk完成集成。需求是让扩展发起的所有调用都携带API密钥,方便自有服务端验证请求来源确实来自Zoho。根据官方规则说明,可以在Zoho Sigma中配置自定义「Connection」,实现扩展发起的所有调用请求头自动携带自定义API密钥,但目前配置完成后,扩展发起的所有调用都没有在请求头中带上设置的自定义API密钥。
Connection配置操作流程
- 进入Zoho Sigma,依次点击Connections标签 > Custom Services > Create Service,创建服务时使用的配置如下:
- Service Name(服务名称):
MyApp - Service Link Name(服务链接名):
myapp - Authentication Type(认证类型):
Header(请求头认证) - Parameter Key(参数键名):
api - Parameter Display Name(参数显示名):
api
- 为刚创建的服务点击「Create Connection」创建连接,配置如下:
- Connection Name(连接名称):
MyApp - Connection Link Name(连接链接名):
myapp - Use Credentials of Login User(使用登录用户凭证):
Yes(是)
- 为刚创建的连接点击「Connect」,输入API密钥值(测试示例值为
123test)。 - 复制刚创建的连接「JSON」标签页下的Sample Code(示例代码),粘贴到扩展的
plugin-manifest.json文件的connectors数组中。 - 执行
zet pack命令打包扩展,随后上传至Zoho Sigma。 - 通过安装链接将扩展安装到Zoho Desk中。
- 安装过程弹出连接授权提示时,再次输入API密钥(示例值为
123test)。我不清楚重复要求授权的原因,但仍按提示完成操作以避免配置遗漏。
完成上述流程后,我原本预期扩展resources.json中定义的sync push/pull端点收到的所有调用都会在请求头中携带api密钥,但实际这些请求中完全不存在api请求头字段。我通过抓包工具测试查看请求详情,确认确实缺失预期的api请求头字段,现咨询配置存在的问题。
扩展resources.json文件内容
{ "channel": { "resourceName" : "webApp", "channelLogoPath" : "/app/img/logo.png", "acceptAttachments" : false, "updateRecords" : true, "contentTypes" : ["text/plain","text/html"], "redirectUrl" : "https://hookb.in/6JqjpyMNyzToO0ro3nGQ", "includeQuotedMessage": false, "sync": { "push": "https://hookb.in/6JqjpyMNyzToO0ro3nGQ", "pull": "https://hookb.in/6JqjpyMNyzToO0ro3nGQ" } } }
扩展plugin-manifest.json文件内容
{ "locale": [ "en" ], "service": "DESK", "storage": false, "type": "personal", "whiteListedDomains": ["https://hookb.in"], "modules": { "widgets": [ { "location": "desk.ticket.detail.rightpanel", "url": "/app/widget.html", "name": "Agent Cake Extension", "logo": "/app/img/logo.png", "icon": "/app/img/icon.png" } ] }, "cspDomains": { "connect-src": [] }, "zohoAuthorisation": {}, "callbackListener": { "onInstall": "https://hookb.in/6JqjpyMNyzToO0ro3nGQ", "onUpdate": "https://hookb.in/6JqjpyMNyzToO0ro3nGQ" }, "connectors": [{ "connectionLinkName": "myapp", "connectionName": "MyApp", "serviceName": "myapp", "userAccess": true, "isUserDefinedService": true, "sharedBy": "7002150130" }], "config": [], "moduleSupport": false, "secret": "somerandomstringhere" }
内容的提问来源于stack exchange,提问作者TinyTiger
相关产品推荐
相关产品推荐

