**
1. 概述
接入钉钉并免登录,对前端而言需要传给后端的是两个code,至于后端用到哪个就取哪个,传过去的code类似于账号密码,代表此钉钉用户的唯一信息,该code由钉钉返回给前端,前端传给后端,后端用此code调用钉钉提供的api获取具体用户信息等等,两个code的获取方式如下:
2. 具体获取方式
- authCode 获取方式
在钉钉后台配置应用icon、应用名称、应用地址时,应用地址填写钉钉提供的固定的一串url,此url中拼接进次应用首页的地址即可,钉钉提供的这个url会自动跳转到钉钉的页面,然后解析出地址中拼接的应用url并重定向跳转,跳转过去的同时会在url后面拼接上authCode,前端在页面中解析出url中的authCode参数并传给后端即可,具体链接如下:
https://login.dingtalk.com/oauth2/challenge.htm?redirect_uri=http://***.com/user/ding/login&response_type=code&client_id=***&scope=openid%20corpid&prompt=consent&FEForceLogin=true&corpId=***
此地址中有三个参数是活的,其他都是钉钉提供的写死的,这三个参数分别是
- redirect_uri:具体要跳转的你此应用对应的地址,钉钉会解析出里面的这个参数,跳转过去并且拼接上authCode,类似这种http://***.com/user/ding/login&authCode=123456
- client_id:在钉钉应用开发平台中配置时,你的配置后台中凭证与基础信息中获取
- corpId:在钉钉应用开发平台中配置时,你的配置后台中凭证与基础信息中获取
注:此地址固定部分由钉钉提供,具体可能随着版本变动有变化,建议去官方文档中对比一下,但具体使用方式不会变
- code获取方式
通过钉钉提供的dingtalk-jsapi插件获取,具体代码如下
import * as dd from 'dingtalk-jsapi'; // 此方式为整体加载,也可按需进行加载
dd.ready(() => {
dd.runtime.permission.requestAuthCode({
corpId: corpId as string, // 企业id
// @ts-ignore
onSuccess: (info) => {
const code = info.code
},
onFail: () => null,
});
});
}
其中的corpId变量获取方式同上面一样,在配置后台中凭证与基础信息中获取