zoukankan      html  css  js  c++  java
  • 钉钉扫码登录web网站

    钉钉扫码登录网站

    • 前言
       由于本公司前后台分离,这里主要讲述后台的实现逻辑与过程,前端相关的一略而过。前端我们采用的是把二维码内嵌到我们的网页中。

    流程如下:

    1.登录钉钉后台创建一个企业应用

    2.根据appid与app_secret获取access_token

    • access_token有效期为2个小时,可以自行缓存。
        /**
         * 获取access token 有效期2 个小时,有效期获取,值不变,时间延长
         * @return
         */
        public static DdResult getAccessToken(String appid, String secret){
            String requestUrl = "https://oapi.dingtalk.com/sns/gettoken?appid=APPID&appsecret=APPSECRET";
            requestUrl = requestUrl.replace("APPID", appid).replace("APPSECRET", secret);
            String accessTokenResult = HttpClientUtil.doGet(requestUrl);
            log.info("------->> >> -------->> request ding ding access token result:{}", accessTokenResult);
            if (StringUtils.isNotBlank(accessTokenResult)) {
                return JSON.parseObject(accessTokenResult, new TypeReference<DdResult>(){});
            }
            return new DdResult();
        }
    

    3.获取持久码persistent_code

    • 根据前端传回来的code与上一步获取的access_token获取persistent_code,持久码暂时无过期时间。
    
        /**
         * 根据code与accessToken获取用户的持久授权码
         * @param code 临时码,只能使用一次
         * @param accessToken 有效期,2个小时
         * @return
         */
        public static DdResult getPersistentCode(String code, String accessToken){
            String requestUrl = "https://oapi.dingtalk.com/sns/get_persistent_code?access_token=" + accessToken;
            HashMap<String, String> params = Maps.newHashMap();
            params.put("tmp_auth_code", code);
            String accessTokenResult = HttpClientUtil.doPostJson(requestUrl, JSON.toJSONString(params));
            log.info("------->> >> -------->> ding ding persistent token result: {}", accessTokenResult);
            return JSON.parseObject(accessTokenResult, DdResult.class);
        }
    

    4.获取用户授权码SNS_TOKEN

    • 根据上一步获取的openid,persistent_code与2步中获取的access_token获取SNS_TOKEN
    
        /**
         * 获取sns token
         * @param accessToken
         * @param openId
         * @param persistentCode
         * @return
         */
        public static DdResult getSnsToken(String accessToken, String openId, String persistentCode) {
            HashMap<String, String> params = Maps.newHashMap();
            params.put("openid", openId);
            params.put("persistent_code", persistentCode);
            String snsTokenRequestUrl = "https://oapi.dingtalk.com/sns/get_sns_token?access_token=" + accessToken;
            String result = HttpClientUtil.doPostJson(snsTokenRequestUrl, JSON.toJSONString(params));
            log.info("------->> >> -------->> request ding ding sns token result:{}", result);
            return JSON.parseObject(result, new TypeReference<DdResult>(){});
        }
    

    5.获取用户信息

    • 根据上一步获取的SNS_TOKEN获取用户信息。
    
        public static DdResult getUserInfo(String snsToken) {
            String userInfoRequestUrl = "https://oapi.dingtalk.com/sns/getuserinfo?sns_token=" + snsToken;
            String result = HttpClientUtil.doGet(userInfoRequestUrl);
            log.info("------->> >> -------->> >> request ding ding sns token result:{}", result);
            if (StringUtils.isBlank(result)) {
                return null;
            }
            return JSON.parseObject(result, new TypeReference<DdResult>() {});
        }
    

     拿到用户的信息就可以去做登录操作了。

  • 相关阅读:
    NoteExpress 自定义参考文献输出样式
    Gabor学习笔记
    智能电视,谁的电视?谁的智能?
    智能手表的未来:独立还是附属,这是个问题!
    罗技Setpoint控制酷狗等第三方播放器
    Python中pip的SSL异常
    解决ArcPy脚本工具中文乱码问题
    文件夹exe病毒的清理
    WinRAR解压提示压缩包损坏
    网络数据集不能重命名
  • 原文地址:https://www.cnblogs.com/chaos-x/p/9415665.html
Copyright © 2011-2022 走看看