钉钉第三方扫码免登入unionid和dingid的区别

钉钉免登入unionid和dingid的问题

首先我们的系统实现了第三方WEB网站扫码登录第三方WEB网站免登两种方式。希望用户登入的时候可以获取到该用户的所属的所有企业,后来发现该数据并没有开放。过程中发现了unionid和dingid的区别。

登入的流程文档

https://open-doc.dingtalk.com/docs/doc.htm?spm=a219a.7629140.0.0.UVmM0j&treeId=385&articleId=104882&docType=1

需要注意的点:
1. 前端页面二维码参数:appid(例如企业A在钉钉开发者平台申请的应用appid)
2. 后端需要:需要appid和appSecret调用一系列的接口,最终获取客户信息。但是用户信息比较有限(已经确定不能获取到企业信息,仅能获取nick,unionid,dingId,openid)
3. 虽然是企业A申请的应用appid, 企业B的用户扫码的时候也可以登入企业A发布的应用, 扫码仅校验用户,不校验企业
4. 如果要实现仅A企业的用户可以登入应用的话,暂时有一种方案是当用户登入之后,利用企业A的CorpId和CorpSecret,通过接口查询信息,程序判断该用户是否属于该企业
5. dingId不推荐作为全局使用, 不能通过dingId和userid互查。(钉钉全局唯一,用户可以修改一次。https://open-doc.dingtalk.com/docs/doc.htm?treeId=173&articleId=107394&docType=1,有的地方说是不可修改,具体未求证),unionId是推荐的企业内全局唯一,并且不可修改
6. 如下是用户A的。在不同企业下有两个unionid。
在公司A下面
钉钉第三方扫码免登入unionid和dingid的区别
在公司B下面
钉钉第三方扫码免登入unionid和dingid的区别
7. user1 属于B企业不属于A企业。扫A企业的码之后的unionid是什么?
下图是利用查询api,查询B企业中,user1(仅加入了企业B)unionId。
钉钉第三方扫码免登入unionid和dingid的区别
下面是user1扫A企业的二维码时,生成的unionId.
钉钉第三方扫码免登入unionid和dingid的区别
利用A企业的assess_token查询unionid和userid转换时
钉钉第三方扫码免登入unionid和dingid的区别
利用B企业的assess_token查询时
钉钉第三方扫码免登入unionid和dingid的区别
进一步测试:
把user1加入企业A时,查看user1的unionid
钉钉第三方扫码免登入unionid和dingid的区别
8. user2 属于B企业又属于C企业,但是不属于A企业。扫码之后的unionid是谁的?
其中unionid是A企业的。和问题7一样
钉钉第三方扫码免登入unionid和dingid的区别

总结: unionid是一个企业内,某个用户的唯一标识,如果A企业申请了一个二维码(涉及appid绑定了企业),然后user1属于B企业但是不属于A企业,扫码的时候会生成一个unionid,该id是user1在企业A的唯一id,不管user1是否加入了A企业,都不会改变(如果dingId改变的情况没试过)。