2
最近在踩基于钉钉开放平台进行开发的坑,然后在进行身份认证时遇到了“钉钉获取免登陆授权码CODE,返回:不存在的临时授权码40078”的坑,到网上搜索了一圈,发现这个关于这个问题描述的资料非常少,也没有看到对应的解决方案,经过摸索之后,总结一下经验,希望能帮到大家。

1、钉钉开放平台关于身份验证的描述

身份验证“免登”是指用户进入应用后,无需输入钉钉用户名和密码,应用程序可自动获取当前用户身份,进而登录系统的流程。https://ding-doc.dingtalk.com/doc#/serverapi2/vt6khw

1.1、企业应用免登

当您是为自己的企业/代表一个企业开发全新的“企业应用”,或者把您的企业内部的遗留系统连接到钉钉后形成“企业微应用”后,企业员工在钉钉内使用该企业微应用时,只要直接点击应用,便可免输入账户密码实现自动登录您所开发的系统。

1.2、 应用管理后台免登

当您开发完企业或者ISV微应用后,需要企业管理员在oa.dingtalk.com对微应用进行一些设置和管理功能时,您需要开发一套应用的后台管理系统,管理员在oa.dingtalk.com中只要直接点微应用管理后台,便可免输入账户密码实现自动登录您的应用管理后台系统。

1.3、扫码登录第三方网站

当您开发了一个独立的网站,但是希望用户以钉钉的账号登录您的网站时,可以通过钉钉扫码方式实现免密登录此网站。注意此网站并不是钉钉客户端内使用的企业/ISV应用。

1.4、钉钉内免登第三方网站

当您开发的H5网站在钉钉客户端内打开,只需要用户直接点击H5链接,便可以免输入钉钉账户密码实现自动登录的流程。注意此网站并不是钉钉客户端内使用的企业应用/第三方企业应用。

1.5、密码登录独立的第三方网站

当您开发了一个独立的网站,希望以钉钉的账号登录您的网站时,可以通过展现钉钉提供的登录URL的页面,用户输入钉钉账户密码后实现登录您的网站的流程。注意此网站并不是钉钉客户端内使用的企业应用/第三方应用。

2、钉钉关于“不存在的临时授权码”问题的描述

当您通过临时授权码(tmp_auth_code)和套件token(suite_access_token)去换取永久授权码(permanent_code)之时,需要保证suite_access_token,tmp_auth_code都没有过期。https://g.alicdn.com/dingding/opendoc/docs/_faq/tab0.html?t=1467363847934#q-%E4%B8%8D%E5%AD%98%E5%9C%A8%E7%9A%84%E4%B8%B4%E6%97%B6%E6%8E%88%E6%9D%83%E7%A0%81

3、解决思路

其实如果大家认真对方以上两点文档之后已经发现问题出现在哪里了,其实从两个方面查找原因即可:一是access_token是否过期,而是code是否正确。

3.1、说说我的错误

我使用的是企业内部应用免登的接口,其实就是三个步骤,1:获取临时的code;2:获取access_token;3:利用code和access_token获取用户免登陆信息。https://ding-doc.dingtalk.com/doc#/serverapi2/clotub

检查了access_token,发现access_token是可以正常获取的,所以那么问题很有可能是在获取code上面,再次研究文档才发现自己犯了一个非常低级的错误,就是利用了钉钉内免登陆第三方网站的接口获取code,然后用企业内部应用免登的接口进行获取用户的登陆信息,所以解决的方法就是利用企业内部应用免登的接口获取code,然后用企业内部应用免登的接口进行获取用户的登陆信息。

至此我的问题已经解决了,其实就是一个很低级的错误,认真阅读官方文档的话完全可以避免这个情况的发生。

刘运传
6 声望2 粉丝