【企业微信】企业微信二次验证
2020-05-02 本文已影响0人
7ColorLotus
-
什么是企业微信的二次验证?
企业微信的二次验证是企业微信通讯录功能的一部分,当企业微信成员登录进入企业微信前,可以自定义一个页面做拦截,只有满足我们自定义页面的需求时,才可以正常的进入企业微信。 -
企业微信二次验证的应用场景
1)对于一些安全性要求比较高的企业,可以在每次进入企业微信前进行一次账号密码校验
2) 除了账号校验,还可以应用在新的企业成员加入公司时,企业微信可以设置一个同意xxx协议的功能
3)企业微信里记录的成员信息有限,当我们发现企业微信里提供的成员信息无法满足我们需求时,可以使用企业微信的二次验证功能,让企业成员在首次进入企业微信时补充一些企业需要的成员其他个人信息 -
企业微信二次验证的开发流程
- 在企业微信管理后台里,配置二次验证页面
(1)位置:我的企业 -> 安全与保密 -> 二次验证
(2)点击“编辑”链接,输入验证页面地址,通常这个地址是一个静态页面
(3)选择验证频率,可选的频率: (a)每次登录 (b)仅首次加入企业 (c)距离上次验证超过30天(d)距离上次验证超过7天
- 当成员登录企业微信或关注微工作台进入企业时,会自动跳转到企业自定义的验证页面。在跳转到企业的验证页面时,会带上如下参数:code=xxx,如:http://www.7corlotus.net?code=xxxxx。前端会将这个code和验证数据一并交给后端处理。后端收到code后,可以使用企业微信官方提供的接口获取成员的userid。
- 在企业微信管理后台里,配置二次验证页面
/**
* 获取用户信息地址
*/
private static final String GET_USER_INFO_URL = "https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=%s&code=%s";
public static final String WECHAT_WORK_API_ERROR_CODE_STR = "errcode";
public static final String WECHAT_WORK_API_ERROR_MSG_STR = "errmsg";
public static final Integer WECHAT_WORK_API_ERROR_CODE_SUCCESS = 0;
public static final String WECHAT_WORK_ACCESS_TOKEN_INVALID_ERROR_CODE = "40014";
/**
* 根据code获取成员信息
* @param code
* @param accessToken 可以是企业微信应用的accessToken,也可以是企业微信通讯录的accessToken
* @return
*/
public static JSONObject getUserInfo(String code, String accessToken){
log.info("getUserInfo code : {}, accessToken : {}", code, accessToken);
String result = HttpUtil.doGet(String.format(GET_USER_INFO_URL, accessToken, code));
log.info("getUserInfo result: {}", result);
JSONObject jsonResult = JSONObject.parseObject(result);
if (WECHAT_WORK_ACCESS_TOKEN_INVALID_ERROR_CODE
.equals(jsonResult.get(WECHAT_WORK_API_ERROR_CODE_STR))) {
accessToken = forceGetAccessToken(); //如果accessToken过期重新获取一次
result = HttpUtil.doGet(String.format(GET_USER_INFO_URL, accessToken, code));
log.info("second getUserInfo result: {}", result);
jsonResult = JSONObject.parseObject(result);
}
return jsonResult;
}
- 获取到成员的userid后,可以再去获取成员的其他信息并处理自定义页面的一些验证数据。
- 自定义的验证逻辑通过后,我们就可以通过调用企业微信的二次验证接口让成员成功加入企业
/**
* 二次验证接口URL
*/
private static final String AUTH_SUCC_URL = "https://qyapi.weixin.qq.com/cgi-bin/user/authsucc?access_token=%s&userid=%s";
/**
* 企业微信二次校验接口
* @param userId
* @param accessToken
* @return JSONObject
*/
public static JSONObject authSucc(String userId, String accessToken){
log.info("authSucc userId : {}, accessToken : {}", userId, accessToken);
String result = HttpUtil.doGet(String.format(AUTH_SUCC_URL, accessToken, userId));
log.info("authSucc result: {}", result);
JSONObject jsonResult = JSONObject.parseObject(result);
if (Constants.WECHAT_WORK_ACCESS_TOKEN_INVALID_ERROR_CODE
.equals(jsonResult.get(Constants.WECHAT_WORK_API_ERROR_CODE_STR))) {
accessToken = forceGetAccessToken();
result = HttpUtil.doGet(String.format(AUTH_SUCC_URL, accessToken, userId));
log.info("second authSucc result: {}", result);
jsonResult = JSONObject.parseObject(result);
}
return jsonResult;
}
至此,企业微信的二次验证功能就完成了!!