springboot项目接入钉钉登录

为什么要接入钉钉登录?

钉钉登录可以进行扫码,这样用户可以不记录账号和密码,有些人认为账号和密码很好记呀,但是太过于简单的话,容易被人踩到,我有一个同事闲来无聊逛别人的网站,就猜到了后台,还猜到了一个账号的密码,进去权限还不低。自己的用户和钉钉用户绑定后,如果有人离职,我们也可以通过监听一些消息,自动的清理账号,回收资源。如果我们将我们的应用直接嵌入到钉钉工作台里面,我们还可以更近一步,直接做到钉钉内免登录,这样使用系统更加方便。

如何接入钉钉登录?

钉钉登录本质上就是钉钉的用户数据和我们的用户数据进行绑定,然后钉钉登录后,我们根据钉钉的唯一性信息,去级联出我们的用户信息实现登录功能。

而我们的钉钉用户是依托于企业的,应用是依托于企业的,我们这个唯一性信息是什么,我们可以参考钉钉的基础概念

钉钉开放文档 (dingtalk.com)

看文档中我理解的是UserIdUnionId都能标志一个用户在一个企业下唯一,钉钉文档好多介绍登录的文档,这是最新的,我们根据这个去做比较简单

钉钉开放文档 (dingtalk.com)

按照这个文档,如果我们已经绑定了的话流程就如这个时序图,当然如果我们的系统不需要自己的用户信息,我们完全可以在拿到钉钉用户信息后直接放到session里面进行登录即可。

sequenceDiagram actor user as 用户 participant server as 服务器 participant dingtalk as 钉钉服务器 user->>dingtalk:请求钉钉登录页面 dingtalk -->> user:返回钉钉登录页 user ->> user:填写钉钉账号信息(可扫码) user ->> dingtalk: 提交登录请求 dingtalk -->> user:询问是否允许授权? user ->> dingtalk: 确认授权 dingtalk->> server:携带authCode重定向到服务器 server ->> dingtalk: 调用获取用户token接口 dingtalk ->> server: 返回用户token server ->> dingtalk: 根据用户token调用获取用户通讯录个人信息接口获取用户个人信息 dingtalk->>server:返回用户个人信息 server ->> server: 根据UnionId查询用户信息进行登录 server ->> server: 重定向到主页 server -->> user: 返回主页信息

绑定的步骤也比较简单,我们还是调用钉钉登录流程只不过,我们将根据unionId查询用户信息进行登录这一步换成绑定用户信息即可,返回json啥的都行,前台好判断就行,绑定需要在我们的用户登录后进行操作。

创建企业内应用

image.png

需要申请的权限

  • 个人手机号信息
  • 通讯录个人信息读权限

image.png

注意权限范围需要设置全部员工。

springboot demo项目

dingtalk-login

这是一个实现接入钉钉登录的springboot项目的demo, 项目主要演示功能

  • 我们系统账号和钉钉账号绑定解绑
  • 通过钉钉登录登录我们的系统
  • 在钉钉工作台里面实现免登功能(先绑定)。

首先先准备一个数据库库,库名可以起名dingtalk-login, 执行sql里面的脚本 创建表,然后在钉钉管理后台创建应用,复制参数更改springboot项目的yml配置。

项目对于钉钉接口的调用都是使用springcloud openfeign对接,个人感觉使用feign比sdk好用的多,也好调试。

默认的测试用户数据:admin 123456

钉钉应用的参数配置

我们就是需要复制这两个参数修改到项目的yml配置中

image.png

第三方网站的钉钉登录,意思是你想要在浏览器中打开网站使用钉钉登录,接入登录的参数是一定要配置的,域名一定要和自己网站打开的域名一致,这里其实就是在本地测试用内网穿透的地址,内网穿透工具钉钉提供了,不过这里我用的是

NATAPP-内网穿透 基于ngrok的国内高速内网映射工具

免费的测试也够了

image.png

还有就是上面提到的需要的权限,可以在权限管理中搜索进行设置。

当我们的应用开发完成之后我们可以进行版本的发布,只需要把登录配置的内网穿透域名换成外网域名就可以,发布的时候可以选择应用的可见性,如果都能用的就配置全部员工就可以。

image.png

要想要在钉钉控制台中打开应用,需要开发管理中配置你需要访问的域名,因为我们有免登,我们根据钉钉提供的参数格式,获取企业的id用于免登,注意这里的corpId一定要这么填写。

image.png

这样在控制台中点击我们的应用的时候就会打开这个链接,执行我们的免登代码,登录成功自动跳转到首页。

image.png

最终的效果怎么样?

image.png

image.png

image.png

如果在钉钉控制台打开就直接登录了,因为这个账号是绑定过的

image.png

posted @ 2022-05-21 14:36  Bug的梦魇  阅读(1649)  评论(0编辑  收藏  举报