Index
需求
要使用钉钉扫码登录,也就是需要把kintone的登录画面替换成扫码画面。
而在扫码后,则需要获取钉钉用户的身份信息并将其转化为对应的kintone用户。
最后服务端生成相应的session,并展示登录后的画面。
在无法修改kintone源码的前提下,该如何实现这一功能?
原理
其实使用其他账号登录kintone系统,这个就是一个单点登录(SSO)的需求。
kintone本身则自带SSO相关设置。
当kintone作为SP提供服务时,我们只需要改造与之对接的IdP端,让它对接钉钉扫码登录即可。
程序
程序设计图如下:
我们需要实现的是IdP部分,这部分代码可以从以下地址获取:
由于项目采用了Node.js来开发,并且在配置方面需要生成验证身份用的证书文件。
所以请大家自行安装Node.js和openssl。
代码说明
使用express搭建http服务器。
使用samlp作为saml中间件,来处理saml请求。
使用memory-cache作为缓存。缓存token、设定及用户信息。
这次的demo不建立本地的用户session。
kintone saml的关联项只有登录名,所以绑定手机号和登录名即可。
配置
钉钉端配置
数据库端配置
为简化安装,这里使用kintone app来实现数据的存储。
创建用户对应关系app,并设置查询token
字段名 类型 字段代码 kintone用户登录名 单行文本框 loginName 手机号 单行文本框 mobile 创建钉钉管理app,并设置查询token
字段名 类型 字段代码 描述 kintone域名 单行文本框 domain 需要使用SSO功能的kintone域名,如:xxxx.cybozu.cn APPID 数值 appid 用户对应关系APPID 用户对应关系APPToken 单行文本框 token 用户对应关系APP查询token corpId 单行文本框 corpId 钉钉的corpId AppSecret 单行文本框 appSecret 钉钉微应用的AppSecret AppKey 单行文本框 appKey 钉钉微应用的AppKey callbackurl 单行文本框 callback 钉钉微应用中设置的回调域名
IdP端配置
安装依赖:进入Dingtalk-IdP-demo目录,执行:
npm i
生成证书:
执行cert.sh脚本或者你也可以直接复制并执行脚本中的openssl命令。
执行成功将会新增2个pem文件。
在项目根目录下新建.env文件,添加如下内容:
DOMAIN=管理app所在的kintone域名 APPID=管理appID TOKEN=管理app的查询token
启动项目,在终端中输入:
npm start
kintone共通管理配置
进入共通管理需要admin权限,没有权限的请去申请自己的开发者账号。
进入cybozu共通管理->系统管理->安全性->登录
勾选启用SAML身份验证
Identity Provider的SSO终结点URL(HTTP-Redirect)中输入 http://127.0.0.1:3000/saml/sso
退出cybozu.cn后的跳转URL 中输入 http://127.0.0.1:3000/signout
Identity Provider在签名时使用的公钥证书 上传IdP端根目录中生成的 idp-public-cert.pem
点击保存