钉钉单点登入云星空(一)原创
金蝶云社区-好丽友的好朋友
好丽友的好朋友
5人赞赏了该文章 507次浏览 未经作者许可,禁止转载编辑于2024年04月01日 11:54:08

主要的交互流程如下:1.点击钉钉中的创建的应用-->2.应用根据获取用户的code与token3.根据code与token再获取该用户的信息->根据用户信息调用云星空的接口返回拼接登入URL;

  1. 钉钉创建应用如下图

    image.png

image.png

image.png

注意点:H5微应用、权限需要全部开通、应用首页地址填写自己开发的地址;

2. 获取code与token

2.1获取code(怎样获取code可以查询钉钉标准文档,以下是我对code的一些理解及我是怎样获取code的)

code是每个用户在点击此应用的时候唯一的一个code,有效时间为5分钟。

获取该code的目标是要和token一起获取该用户的基本信息,如用户名,用户ID等;

获取code代码需要写在上面地址栏目的开发地址我的网址页面是http:127.0.0.1:7219/htmlpage.html

代码如下:

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <script src="https://g.alicdn.com/dingding/dingtalk-jsapi/2.11.1/dingtalk.open.js"></script>

    <title>调用接口示例</title>

</head>


    <script>

        function getAuthCode() {

            dd.ready(function () {

                dd.runtime.permission.requestAuthCode({

                    corpId: 'dingac0db83956b84874ffe93478753d9884', // 企业的CorpId

                    onSuccess: function (info) {

                        var code = info.code; // 获取到的授权码

                        console.log("授权码:" + code);

                        document.getElementById('result').innerHTML = code;

                        SendUserCODE(code);

                        // 将授权码发送给WebAPI接口

                        //sendAuthCodeToWebAPI(code);

                    },

                    onFail: function (err) {

                        console.log('requestAuthCode failed:', err);

                        alert("错误调用!" + err);

                    }

                });

            });

        }

    </script>

以上代买会返回一个用户code

2.2获取token

                string corpId = "dingac0*******"; // 钉钉创建的企业的CorpId

                string appKey = "******"; // 钉钉创建的企业应用的AppKey

                string appSecret = "1-*****-a2adfG"; // 钉钉创建企业应用的AppSecret

                string accessTokenUrl = $"https://oapi.dingtalk.com/gettoken?appkey={appKey}&appsecret={appSecret}";

                // 请求钉钉获取AccessToken

                HttpResponseMessage response = await client.GetAsync(accessTokenUrl);

                response.EnsureSuccessStatusCode();

                string accessTokenResponse = await response.Content.ReadAsStringAsync();

                AccessTokenResponse accessTokenObj = JsonConvert.DeserializeObject<AccessTokenResponse>(accessTokenResponse);

                string accessToken = accessTokenObj.access_token;// 在实际应用中从 accessTokenResponse 中解析获取 AccessToken


2.3 根据code与token获取用户名

IDingTalkClient client1 = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/getuserinfo");

OapiV2UserGetuserinfoRequest req = new OapiV2UserGetuserinfoRequest();

req.Code = code;

OapiV2UserGetuserinfoResponse rsp = client1.Execute(req, accessToken);

JObject data = JObject.Parse(rsp.Body);

string UserNmae = (string)data["result"]["name"];

Console.WriteLine(rsp.Body);

string KindeeUrl =  CallKingdeeUrl(UserNmae);



赞 5