netcore接入钉钉扫码登录

您所在的位置:网站首页 钉钉扫码登录如何操作手机版下载 netcore接入钉钉扫码登录

netcore接入钉钉扫码登录

2024-07-09 10:44| 来源: 网络整理| 查看: 265

netcore接入钉钉扫码登录 一、首先官方文档预览二、登录钉钉开发者后台三、创建第三方登录授权应用1.新版打开方式2.旧版打开方式(1)先返回旧版页面(2)选择应用开发(3)编辑登录应用信息(4)记录下appid和appSecret后续需要 四、添加企业内部应用1.添加应用2.配置应用信息3.记录下appkey和appsecret4.添加回调地址 五、添加接口调用权限六、添加内网穿透七、搭建项目1.代码下载2.SDK下载和配置(1)sdk文档(2)下载sdk 3.修改博主的项目配置 八、代码详解1.修改appsettings.json文件1.view修改2.代码演变以钉钉功能调试3.打开钉钉提供的api调试台4.根据对应的相应的信息获得demo代码直接复制到咱们的controller中(1)先获取access_token(2)通过扫码获得的code结合access_token获得用户unionid(3)通过上一步sns码获得的unionid去获取userid(4)通过上一步userid去获得用户的详细信息 七、剩下功能大同小异,自己根据文档和下面给出的两个api调试控制台差不多都能搞定

一、首先官方文档预览

以下信息根据这个文档来进行讲解,其中进行了补充,使得文档更加易于理解(因为这方面netcore参考不多,我收集现在资料出一个较为详细的操作信息) 实现登录第三方网站文档

二、登录钉钉开发者后台

这里需要账号权限,需要公司给与开通相应得权限,这里默认为有权限。

钉钉开发者后台

三、创建第三方登录授权应用 1.新版打开方式

现在开发后台打开得都是默认新版页面,但是我没找到创建第三方登录授权应用按钮,所以接下来都是以旧版界面为例

在这里插入图片描述 选择移动应用接入 在这里插入图片描述

2.旧版打开方式

这里开始往下都是旧版模式界面

(1)先返回旧版页面

在这里插入图片描述

(2)选择应用开发

在这里插入图片描述

(3)编辑登录应用信息

在这里插入图片描述 回调域名是后端接口得具体地址

(4)记录下appid和appSecret后续需要

在这里插入图片描述

四、添加企业内部应用

这里特别注意

第三和这第四步创建的应用用途不一样 弟三步创建的应用,是用来登录的(我现在觉得理解为登录接口api合适点,应用有点抽象),这里的appkey和secrect是用来调取二维码用的 这第四步是用来创建真正的应用,你项目(第三方网站)所依赖的应用

1.添加应用

这里可以开发其他得应用,但这里不予以展示,自行摸索 在这里插入图片描述

2.配置应用信息

在这里插入图片描述

3.记录下appkey和appsecret

在这里插入图片描述

4.添加回调地址

在这里插入图片描述

五、添加接口调用权限

在这里插入图片描述

六、添加内网穿透

因为钉钉需要请求后端服务的接口,但在开发前期你需要测试,或者你处于公司内网,钉钉调取不到你的接口,所以需要进行内网穿透,来让钉钉服务能通过外网访问到你的主机。 点击这里查看我收集的两种内网穿透方法文章

七、搭建项目 1.代码下载

为了方便这里没有用前后分离,直接使用netcoremvc开发

在这里是使用的这位博主得代码,是在他得基础上进一步详细讲解和补充(controller修改了部分代码,适应新版sdk,view也就是前端页面只修改了几个配置,下面会指出,其他都是没有改动的) 代码下载

2.SDK下载和配置 (1)sdk文档

SDK文档地址

(2)下载sdk

新版sdk 新版sdk直接解压 旧版sdk(netcore版本,net版本还未尝试,自行摸索) 在这里插入图片描述 解压红框内的文件 在这里插入图片描述

3.修改博主的项目配置

直接打开是无法直接使用的需要引入sdk 在这里插入图片描述

右键项目解决方案-》添加-》项目引用,让后分别找到上面下载sdk的csproj添加上此时项目结构如上。

右键DingQrCodeLogin-》添加-》项目应用然后添加上这两个sdk的引用

八、代码详解 1.修改appsettings.json文件

==注意本文涉及了两个应用,一个是登录授权应用,一个是你自己的三方应用,这俩分别都有一对appid(key)和appsecret。不要设置混淆了,这是是设置为自己三方应用的。 在这里插入图片描述

1.view修改

view(界面)只需要修改如下地方 在这里插入图片描述 在这里插入图片描述

这里用户扫扫码后会给homecontroller传递code和state两个参数,state是固定的不用管

2.代码演变以钉钉功能调试

修改刚才下载下来的homecontroller代码

什么都没干,先定义方法接收,扫码后传递过来的参数

public string DingLogin(string code, string state) { } 3.打开钉钉提供的api调试台

api调试台

在这里插入图片描述

4.根据对应的相应的信息获得demo代码直接复制到咱们的controller中 (1)先获取access_token

免密登录,需要access_token才行

public static AlibabaCloud.SDK.Dingtalkoauth2_1_0.Client CreateClient() { AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config(); config.Protocol = "https"; config.RegionId = "central"; return new AlibabaCloud.SDK.Dingtalkoauth2_1_0.Client(config); } public string DingLogin(string code, string state) { AlibabaCloud.SDK.Dingtalkoauth2_1_0.Client client = CreateClient(); AlibabaCloud.SDK.Dingtalkoauth2_1_0.Models.GetAccessTokenRequest getAccessTokenRequest = new AlibabaCloud.SDK.Dingtalkoauth2_1_0.Models.GetAccessTokenRequest(); try { // 这里获得了咱们的access_token client.GetAccessToken { AppKey = "自己的外部appkey",AppSecret = "自己。。。" }; } } (2)通过扫码获得的code结合access_token获得用户unionid

在这里插入图片描述

public static AlibabaCloud.SDK.Dingtalkoauth2_1_0.Client CreateClient() { AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config(); config.Protocol = "https"; config.RegionId = "central"; return new AlibabaCloud.SDK.Dingtalkoauth2_1_0.Client(config); } public string DingLogin(string code, string state) { AlibabaCloud.SDK.Dingtalkoauth2_1_0.Client client = CreateClient(); AlibabaCloud.SDK.Dingtalkoauth2_1_0.Models.GetAccessTokenRequest getAccessTokenRequest = new AlibabaCloud.SDK.Dingtalkoauth2_1_0.Models.GetAccessTokenRequest(); try { // 这里获得了咱们的access_token client.GetAccessToken { AppKey = "自己的外部appkey",AppSecret = "自己。。。" }; //通过扫码获得的code和上面获取的access_token,获取unionid OapiSnsGetuserinfoBycodeResponse response = new OapiSnsGetuserinfoBycodeResponse(); string qrAppId = AppConfigurtaionHelper.Configuration["DingDing:QrAppId"]; string qrAppSecret = AppConfigurtaionHelper.Configuration["DingDing:QrAppSecret"]; if (string.IsNullOrWhiteSpace(qrAppId) || string.IsNullOrWhiteSpace(qrAppSecret)) { throw new Exception("钉钉配置信息错误!"); } DefaultDingTalkClient uclient = new DefaultDingTalkClient("https://oapi.dingtalk.com/sns/getuserinfo_bycode"); OapiSnsGetuserinfoBycodeRequest ureq = new OapiSnsGetuserinfoBycodeRequest(); ureq.TmpAuthCode = code; response = uclient.Execute(ureq, qrAppId, qrAppSecret); } } (3)通过上一步sns码获得的unionid去获取userid

在这里插入图片描述

public static AlibabaCloud.SDK.Dingtalkoauth2_1_0.Client CreateClient() { AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config(); config.Protocol = "https"; config.RegionId = "central"; return new AlibabaCloud.SDK.Dingtalkoauth2_1_0.Client(config); } public string DingLogin(string code, string state) { AlibabaCloud.SDK.Dingtalkoauth2_1_0.Client client = CreateClient(); AlibabaCloud.SDK.Dingtalkoauth2_1_0.Models.GetAccessTokenRequest getAccessTokenRequest = new AlibabaCloud.SDK.Dingtalkoauth2_1_0.Models.GetAccessTokenRequest(); try { // 这里获得了咱们的access_token client.GetAccessToken { AppKey = "自己的外部appkey",AppSecret = "自己。。。" }; //通过扫码获得的code和上面获取的access_token,获取unionid OapiSnsGetuserinfoBycodeResponse response = new OapiSnsGetuserinfoBycodeResponse(); string qrAppId = AppConfigurtaionHelper.Configuration["DingDing:QrAppId"]; string qrAppSecret = AppConfigurtaionHelper.Configuration["DingDing:QrAppSecret"]; if (string.IsNullOrWhiteSpace(qrAppId) || string.IsNullOrWhiteSpace(qrAppSecret)) { throw new Exception("钉钉配置信息错误!"); } DefaultDingTalkClient uclient = new DefaultDingTalkClient("https://oapi.dingtalk.com/sns/getuserinfo_bycode"); OapiSnsGetuserinfoBycodeRequest ureq = new OapiSnsGetuserinfoBycodeRequest(); ureq.TmpAuthCode = code; response = uclient.Execute(ureq, qrAppId, qrAppSecret); //获取用户id IDingTalkClient ubclient = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/user/getbyunionid"); OapiUserGetbyunionidRequest ubreq = new OapiUserGetbyunionidRequest { Unionid = response.UserInfo.Unionid}; OapiUserGetbyunionidResponse ubrsp = ubclient.Execute(ubreq, a.Body.AccessToken); Console.WriteLine(ubrsp.Body); } } (4)通过上一步userid去获得用户的详细信息

在这里插入图片描述

public static AlibabaCloud.SDK.Dingtalkoauth2_1_0.Client CreateClient() { AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config(); config.Protocol = "https"; config.RegionId = "central"; return new AlibabaCloud.SDK.Dingtalkoauth2_1_0.Client(config); } public string DingLogin(string code, string state) { AlibabaCloud.SDK.Dingtalkoauth2_1_0.Client client = CreateClient(); AlibabaCloud.SDK.Dingtalkoauth2_1_0.Models.GetAccessTokenRequest getAccessTokenRequest = new AlibabaCloud.SDK.Dingtalkoauth2_1_0.Models.GetAccessTokenRequest(); try { // 这里获得了咱们的access_token client.GetAccessToken { AppKey = "自己的外部appkey",AppSecret = "自己。。。" }; //通过扫码获得的code和上面获取的access_token,获取unionid OapiSnsGetuserinfoBycodeResponse response = new OapiSnsGetuserinfoBycodeResponse(); string qrAppId = AppConfigurtaionHelper.Configuration["DingDing:QrAppId"]; string qrAppSecret = AppConfigurtaionHelper.Configuration["DingDing:QrAppSecret"]; if (string.IsNullOrWhiteSpace(qrAppId) || string.IsNullOrWhiteSpace(qrAppSecret)) { throw new Exception("钉钉配置信息错误!"); } DefaultDingTalkClient uclient = new DefaultDingTalkClient("https://oapi.dingtalk.com/sns/getuserinfo_bycode"); OapiSnsGetuserinfoBycodeRequest ureq = new OapiSnsGetuserinfoBycodeRequest(); ureq.TmpAuthCode = code; response = uclient.Execute(ureq, qrAppId, qrAppSecret); //获取用户id IDingTalkClient ubclient = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/user/getbyunionid"); OapiUserGetbyunionidRequest ubreq = new OapiUserGetbyunionidRequest { Unionid = response.UserInfo.Unionid}; OapiUserGetbyunionidResponse ubrsp = ubclient.Execute(ubreq, a.Body.AccessToken); Console.WriteLine(ubrsp.Body); //获取用户信息 IDingTalkClient client2 = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/get"); OapiV2UserGetRequest req2 = new OapiV2UserGetRequest { Userid = ubrsp.Result.Userid }; OapiV2UserGetResponse rsp2 = client2.Execute(req2, a.Body.AccessToken); } }

剩下的就需要直接自己去根据需求进行探索

七、剩下功能大同小异,自己根据文档和下面给出的两个api调试控制台差不多都能搞定

功能api

功能api



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3