概述
本文将介绍一些钉钉的自动登录集成方法,自动登录包括 小程序的自动登录和H5的自动登录。不过他们的思路都是类似的。
主要流程是:
- 根据API获取上下文的授权码。
- 根据授权码获取当前登录的用户信息。
- 利用这个用户信息和系统绑定实现自动登录。
实现方法
H5免登录
1.获取授权码
dd.ready(function() {
dd.runtime.permission.requestAuthCode({
corpId: corpId, // 企业id
onSuccess: function (info) {
code = info.code // 通过该免登授权码可以获取用户身份
}});
});
传入企业ID,返回免登录授权码。
2.获取token
根据应用的 appkey 和 secret 获取token。
DefaultDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken");
OapiGettokenRequest request = new OapiGettokenRequest();
request.setAppkey(appKey);
request.setAppsecret(secret);
request.setHttpMethod("GET");
OapiGettokenResponse response = client.execute(request);
accessToken=response.getAccessToken();
3.根据授权码 获取当前用户ID.
@RequestMapping(value = "/login", method = RequestMethod.POST)
public ServiceResult<Map<String, Object>> login (@RequestParam("authCode") String requestAuthCode) {
// 获取access_token,注意正式代码要有异常流处理
String access_token= AccessTokenUtil.getToken();
// 获取用户信息
DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/user/getuserinfo");
OapiUserGetuserinfoRequest request = new OapiUserGetuserinfoRequest();
request.setCode(requestAuthCode);
request.setHttpMethod("GET");
OapiUserGetuserinfoResponse response;
try {
response = client.execute(request, access_token);
} catch (ApiException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
// 查询得到当前用户的userId
// 获得到userId之后应用应该处理应用自身的登录会话管理(session),避免后续的业务交互(前端到应用服务端)每次都要重新获取用户身份,提升用户体验
String userId = response.getUserid();
Map<String, Object> returnMap = new HashMap<String,Object>();
returnMap.put("userId", userId);
return ServiceResult.success(returnMap);
}
}
小程序免登录
1.获取授权码
dd.getAuthCode({
success:function(res){
/*{
authCode: 'hYLK98jkf0m' //string authCode
}*/
},
fail:function(err){
}
});
后续的步骤同上。
文档更新时间: 2021-03-29 11:53 作者:zyg