调用Smooch v2 API创建webhook返回403 Forbidden无报错如何解决?
Smooch v2 创建webhook返回403 Forbidden排查方案
首先明确文档标注bearerAuth (integration, app)的含义:该内容不是指额外的scope类型,仅代表接口支持两类鉴权主体生成的有效token:一是对应集成的integration级密钥生成的JWT,二是对应应用的app级密钥生成的JWT,和官方公开的account/app两类scope的规则不冲突。
你可以按照以下优先级逐一排查问题:
- 校验路径参数匹配关系
确认请求路径中/apps/后的应用ID618ce23498488b00e1582723,和/integrations/后的集成ID618ce235a6ccf400e1a4b992为从属关系,集成ID必须是该应用下已创建完成的有效集成ID,跨应用调用集成接口会直接返回403。 - 校验JWT生成参数正确性
- 确认生成JWT时填写的
kid字段值app_618ce234fba99000e1bd8***,属于路径中对应应用618ce23498488b00e1582723下生成的有效密钥ID - 确认JWT签名使用的secret和该
kid对应的密钥secret完全匹配,无字符遗漏、错填、前后空格 - 你当前配置的
scope: app、签名算法HS256均符合接口要求,无需调整
- 确认生成JWT时填写的
- 调整接口路径适配使用场景
如果你需要创建的是应用全局生效、触发所有集成事件的webhook,无需使用带集成ID的路径,可以换成通用应用webhook创建接口POST /v2/apps/{appId}/webhooks,该路径对app级token的兼容性更高,不会出现权限误拦截的问题。只有当你需要创建仅响应单个集成事件的webhook时,才需要使用带集成ID的路径。 - 校验Basic鉴权配置规则
如果你使用Basic鉴权调用接口,需要以密钥ID(kid去掉app_前缀)为用户名,对应密钥的secret为密码,不要直接使用带app_前缀的kid作为用户名,也不要使用account级的密钥做应用接口鉴权。 - 校验请求体合法性
确认请求体中target字段为合法的公网可访问HTTPS地址,无内网IP、自签名证书、路径非法字符等问题,部分版本的Smooch接口会在创建时预校验target可用性,校验失败也会返回403。
内容的提问来源于stack exchange,提问作者Vlad Zinko
相关产品推荐
相关产品推荐

