对接钉钉登陆步骤

背景

之前事情较少的时候,帮公司写过一个系统,
这个系统的话主管有要求要对接钉钉登陆。
话不多说我们直接开干。

流程

先进入开发者平台点击开发者后台
在这里插入图片描述
没有组织的 我们先在手机上先创建一个组织
在这里插入图片描述
在这里插入图片描述
创建完成后,就可以看到这个组织了
在这里插入图片描述

创建应用

在这里插入图片描述
这里我们按照步骤创建一个应用
我们选择钉钉应用。 其他的大家可以自己摸索
在这里插入图片描述

创建好之后,点击蓝色的应用的地方
在这里插入图片描述

我们需要修改二个地方

分享设置

在这里插入图片描述
这里设置我们的回调地址,获取钉钉回调回来的code

安全设置

在这里插入图片描述

AppKey 和AppSecret

凭证和基础信息

在这里插入图片描述
这个需要看一下的,到时候后端需要使用的。

部分代码实现

 /**
     * 跳转到登录页面 默认使用钉钉的
     */
    @RequestMapping(value = "/login", method = RequestMethod.GET)
    public String login(@RequestParam(value = "authCode",required = false)String authCode) {
        log.info("/login===>authCode==>>{}:",authCode );
        com.aliyun.dingtalkoauth2_1_0.Client client = null;
        try {
            if(!StringUtils.isEmpty(authCode)) {
                client = authClient();
                GetUserTokenRequest getUserTokenRequest = new GetUserTokenRequest()

                        //应用基础信息-应用信息的AppKey,请务必替换为开发的应用AppKey
                        .setClientId(dingDingProperties.getAppKey())

                        //应用基础信息-应用信息的AppSecret,,请务必替换为开发的应用AppSecret
                        .setClientSecret(dingDingProperties.getAppSecret())
                        .setCode(authCode)
                        .setGrantType("authorization_code");
                GetUserTokenResponse getUserTokenResponse = client.getUserToken(getUserTokenRequest);
                //获取用户个人token
                String accessToken = getUserTokenResponse.getBody().getAccessToken();
                GetUserResponseBody userInfo = getUserInfo(accessToken);
                Subject currentUser = ShiroKit.getSubject();
                String username = PinYinUtils.getPingYin(userInfo.getNick());
                EasyUsernameToken token = new EasyUsernameToken(username);

                currentUser.login(token);

                ShiroUser shiroUser = ShiroKit.getUser();
                if (shiroUser != null) {
                    super.getSession().setAttribute("shiroUser", shiroUser);
                    super.getSession().setAttribute("username", shiroUser.getAccount());
                    userService.setAvatar(shiroUser.getId(),userInfo.getAvatarUrl());
                    LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), HttpKit.getIp()));
                    ShiroKit.getSession().setAttribute("sessionFlag", true);
                    return REDIRECT + "/";
                }
            }
        } catch (Exception e) {
            log.error("error -->>msg==" +e.getMessage()+"==>>>"+e.getLocalizedMessage());
        }
 
        return "/login.html";
    }
  /**
     * 获取用户个人信息
     * @param accessToken
     * @return
     * @throws Exception
     */
    public GetUserResponseBody getUserInfo(String accessToken) throws Exception {
        com.aliyun.dingtalkcontact_1_0.Client client = contactClient();
        GetUserHeaders getUserHeaders = new GetUserHeaders();
        getUserHeaders.xAcsDingtalkAccessToken = accessToken;
        //获取用户个人信息
        return client.getUserWithOptions("me", getUserHeaders, new RuntimeOptions()).getBody();
    }


    public static com.aliyun.dingtalkoauth2_1_0.Client authClient() throws Exception {
        Config config = new Config();
        config.protocol = "https";
        config.regionId = "central";
        return new com.aliyun.dingtalkoauth2_1_0.Client(config);
    }
    

这里的代码的话,大家可以稍微看一下就可以了。 具体的情况的话 大家可以看钉钉的对接文档。
因为我使用的是旧版,目前已经出来了新版,但我还没有弄,为了不误导大家,大家看官方文档就可以了。

说明

钉钉对接的文档
如果又不懂的地方的话,可以留言。看到了我会回复的。

效果截图

在这里插入图片描述

相关推荐

  1. vue+Django接入登录

    2024-06-09 22:34:03       28 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-09 22:34:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-09 22:34:03       101 阅读
  3. 在Django里面运行非项目文件

    2024-06-09 22:34:03       82 阅读
  4. Python语言-面向对象

    2024-06-09 22:34:03       91 阅读

热门阅读

  1. 【DevOps】SD-WAN 详解:定义、架构、优势与应用

    2024-06-09 22:34:03       24 阅读
  2. python 拷贝原来还有这么坑

    2024-06-09 22:34:03       29 阅读
  3. 04-4.1.2 串的存储结构

    2024-06-09 22:34:03       40 阅读
  4. 【react】useEffect 快速上手

    2024-06-09 22:34:03       28 阅读
  5. android-线程池3

    2024-06-09 22:34:03       38 阅读
  6. process to develop linux 5.4

    2024-06-09 22:34:03       42 阅读
  7. 软设之排序算法对比

    2024-06-09 22:34:03       25 阅读
  8. ghidra

    2024-06-09 22:34:03       37 阅读
  9. P11 品牌管理

    2024-06-09 22:34:03       42 阅读