钉钉开放平台 — 应用免登验证时的权限验证失败怎么解决

您好,建议您按照以下方式排查:

1、服务端请求get_jsapi_ticket,将请求到的ticket和过期时间存入DB。不要每次调用都请求jsticket。否则会出现不同页面之前互相抢占覆盖jsticket的问题,导致dd.config失败!

2、web端请求服务端,服务端计算签名,计算签名用到get_jsticket。服务端从本地取出get_jsticket的时候判断一下是否要过期了,可以提前5分钟或者10分钟。如果没过期,就直接使用,如果快过期了,那么加锁更新。[重要的话说三遍“注意加锁更新”]。

3、服务端计算签名传递给前端。

4、前端jsapi调用dd.config给钉钉。注意,JSAPI是分级别的,如果你使用的jsapi是不需要鉴权(鉴权通过dd.config来实施)的,那么是没有必要调用dd.config的。

5、注意,jsticket是通过accesstoken获取的,也就表示jsticket是一个企业维度的值。一个企业公用一个jsticket,而不是企业下的员工使用一个jsticket。 如果频繁调用get_jsticket,钉钉开放平台会有流控限制。

6、有的ISV这样理解,我做一个定时任务定时刷新jsticket不是也行吗?我们不推荐这样做。因为一个套件可能有10w家企业授权。那么这个定时任务会刷新这10w家企业的jsticket,代价太大,容易触发流控,而且这10w家企业也并不是当天都活跃的企业。所以建议按照步骤2,根据企业员工的请求,被动刷新jsticket。

7、js鉴权要求的参数中URL不要写死,也不要一个dd.config的js文件在所有的页面中都引用这段js。因为并不是所有的页面都需要使用dd.config来jsapi鉴权,哪些页面需要鉴权,就在哪些页面上做dd.config鉴权。否则在页面加载的时候会调用很多无用的dd.config,不但效率低,而且易出错。

8、jsapi鉴权使用dd.config的时候,传入的参数一定要和你服务端做签名的参数相同。不要服务端使用一个随机串和时间戳,但是前端通过h5传给dd.config的是另外的值。

9、在dd.config失败的时候,钉钉会在onerror的信息中返回签名的错误信息。一定要仔细比对错误信息,查看哪一个信息是不对的。如何比对错误信息:要求isv准备一个收集前端错误的url,当页面错误的时候把onerror的信息回传给isv的服务器,做好日志备份。同时每次签名的时候,打印出签名时使用的参数。

10、isv要准备一个收集前端错误的url,不建议直接在页面上弹出alert,这样对用户的干扰很大。而且当发生原因7描述的问题的时候,会直接干扰很多不需要dd.config的页面。

让您的团队免费使用钉钉

注册钉钉