浙政钉(专有钉钉)扫码登录

本文介绍了浙政钉(专有钉钉)的扫码登录流程,包括官方文档中获取二维码URL的调整,前端获取二维码页面的HTML示例,以及后端处理扫码后的code来获取accessToken和用户信息的方法。重点强调了code的一次性使用和不同环境的域名设置。
摘要由CSDN通过智能技术生成

浙政钉(专有钉钉)扫码登录

前言

此文章主要是补充一下目前网上浙政钉(专有钉钉)的扫码登录的问题。

正文

官方文档:
链接: 官方文档.
官方文档里的获取二维码的地址:https://login.dg-work.cn/oauth2/auth.htm?response_type=code&client_id=应用标识&redirect_uri=回调地址&scope=get_user_info&authType=QRCODE
这个是有问题的
原文链接:修改参考.
需要注意的是,以浙政钉获取二维码为例:APP_NAME=应用标识_dingoa,这个_dingoa如果你的应用标识里有了就在写的时候不要再带了
https://login-pro.ding.zj.gov.cn/qrlogin/webAppLogin.htm?APP_NAME=应用标识***_dingoa***&protocolKey=自定义(如:UUID)&protocol=oauth2&BACK_URL=回调地址&scope=get_user_info&state=
下面展示一些 内联代码片

下面的是获取前端二维码页面的HTML,可以测试一下,实际开发最好是让前端获取。

	/***
     * 浙政钉应用标识
     */
	private static final  String appID="*****_dingoa";
    /***
     * 浙政钉APPKey
     */
    private static final  String appKey="*********";

    /***
     * 浙政钉appSecret
     */
    private static final String appSecret ="*********";

    /***
     * 浙政钉扫码后回调地址(回调地址是你去申请的)
     */
    private static final String redirectUrl = "*********";

    /***
     * 各环境域名/登录域名(这边看情况选,域名在官方文档里找)
     */
    private static final String domainName ="openplatform-pro.ding.zj.gov.cn";

    /***
     * 各环境域名/登录域名(这边看情况选,域名在官方文档里找)
     */
    private static final String getUserInfoUrl= "login-pro.ding.zj.gov.cn";
public void toALiDingDing(HttpServletResponse response) {
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("https://login-pro.ding.zj.gov.cn/qrlogin/webAppLogin.htm?APP_NAME=")
                .append(appID)
                .append("&protocolKey=UUID&protocol=oauth2&BACK_URL=")
                .append(redirectUrl)
                .append("&scope=get_user_info&state=");
        try {
            response.sendRedirect(stringBuilder.toString());
        } catch (IOException e1) {

        }
    }

前端页面在扫码后会得到一个code,我这边是前端返回的pram,所以写了实体类接收,最好是直接返回data
要注意的是code只能用一次,且不是auth_code
获取人员信息需要accessToken和code,获取接口看看官方文档,这边分别是
accessToken:/gettoken.json
人员信息:/rpc/oauth2/getuserinfo_bycode.json
我是直接把获取accessToken和获取人员信息直接写一块了,因为我后面不需要accessToken了

    private JSONObject getDingTalk(@RequestBody DingLogin entity){
    	//获取token
        ExecutableClient executableClient =ExecutableClient.getInstance();
        executableClient.setAccessKey(appKey);
        executableClient.setSecretKey(appSecret);
        executableClient.setDomainName(domainName);
        executableClient.setProtocal("https");
        executableClient.init();
        //executableClient要单例,并且使用前要初始化,只需要初始化一次

        String api = "/gettoken.json";
        GetClient getClient = executableClient.newGetClient(api);
        String apiResult = getClient.get();
        JSONObject map = JSON.parseObject(apiResult);
        //提取返回值中的token
        String token = map0.getJSONObject("content").getJSONObject("data").getString("accessToken");

        String api = "/rpc/oauth2/getuserinfo_bycode.json";

        PostClient postClient = executableClient.newPostClient(api);
        postClient.addParameter("access_token", token);
        postClient.addParameter("code", entity.getCode());
        String apiResult = postClient.post();

        JSONObject map = JSON.parseObject(apiResult);
        System.out.println(apiResult);
        return map;
    }

返回结果和官方文档相同,就不展示了。
免登的和上面代码差不多,获取auth_code交给前端获取,要注意似乎是只有手机能干这个。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值