惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Engineering at Meta
Engineering at Meta
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
小众软件
小众软件
博客园_首页
T
Tailwind CSS Blog
美团技术团队
博客园 - 叶小钗
Microsoft Security Blog
Microsoft Security Blog
有赞技术团队
有赞技术团队
Apple Machine Learning Research
Apple Machine Learning Research
大猫的无限游戏
大猫的无限游戏
Microsoft Azure Blog
Microsoft Azure Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
I
InfoQ
MongoDB | Blog
MongoDB | Blog
The Cloudflare Blog
J
Java Code Geeks
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 聂微东
酷 壳 – CoolShell
酷 壳 – CoolShell
Blog — PlanetScale
Blog — PlanetScale
IT之家
IT之家
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Y
Y Combinator Blog

博客园 - Insus.NET

Vue3实现拖放式上传 拖放式上传 实现MultipartStreamProvider经Web API上传文档或图片 文件上传和表单字段混合提交 在HttpContext.Current返回null时如何操作 angularjs根据类型动态加载组件 angularjs获取数据服务 扫一扫直连WiFi二维码 User Profile Service 服务未能登录 Visual Studio2026创建Vue项目 安装与配置node.js HTTP Error 403.14 - Forbidden VisualStudio2026回滚上一版本 消息认证码(加强) 网站无法使用插值字符串语法 HMAC(Hash-based Message Authentication Code)认证示例 浏览器自动发送域凭据 企业内小网站兼用Windows验证登录 访问用户控件的函数 onblur事件改为监听处理 将警报消息改为吐司消息 内容有无变化OnBlur即时更新引起的问题与解决 混合式提高用户编辑与操作效率 光标离开文框后即刻更新 WebForm实现Web API JavaScript对GridView删除行后并重新给其数据绑定 把CS值传给JS使用 v2 确认信息confirm由C#后端移至javascript前端 无法发布网站Web Site JavaScript判断字符是否为decimal
钉钉(DingTalk)免登录
Insus.NET · 2025-08-17 · via 博客园 - Insus.NET

公司OA选择了钉钉(DingTalk)。
应实际需求,自己也有开发几款H5微应用,一些资料与数据为避免用户从微应用分享出去。只好为微应用添加免登录功能。
前期准备,在自己的本地数据库服务器中,创建用户表,关从钉钉先同步下来。《获取钉钉用户数据
这是为后面实现免登录时,获取访问者的信息与本地数据库的用户信息对比,如果匹配存在,说明是企业人员,如果不匹配,即是非法者访问。

models:
2025-08-15_21-08-28

2025-08-15_21-15-09

views:

 引用js脚本,

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

2025-08-16_20-30-23

上面截图中,#29行代码,判断是否是在钉钉应用中访问。直接把地址粘贴至手机浏览器或电脑浏览器中,不好意思,它不允许访问。

#32行,这是从控制器使用ViewBag传过来的corpid。

正常情况之下,它可以获取临时的authCode。

这个时候,我们回到DingTalk控制器,根据获取authCode来获取用户信息。添加一个httppost方法 LoginByDingTalk,它返回类型JsonResult。

2025-08-16_20-41-15

 #32,#33行,2个Entity类,稍后分析说明。
#37行,获取userid。
#45行,把userid来去本地数据库(博文前面有提过,把钉钉企业内人员信息存在本地)查找此用户,存在与否。
#48行,验证成功后,让步程序导向免登录的页面。

再回到上上一张截图,第#47行js方法,

function exchangeAuthCodeForDingTalkUserData(authCode){...}

2025-08-17_10-03-23

接着上面所留下的问题,看看DingDingEntity Entity类,
2025-08-17_10-13-40

#20行,是获取AccessToken,此时会有网友会问,怎么需要使用到存储过程?因为Insus.NET有把AccessToken存储在本地数据库。只有过期了,才去从钉钉获取,再更新本地数据库中。

#39行,是从钉钉获取用户认信息,
API:

            string url = $"https://oapi.dingtalk.com/user/getuserinfo?access_token={access_token}&code={code}";

还有一个EmployeeEntity Entity类,
2025-08-17_10-36-54

最后,是重点部分,创建一个过滤器,
2025-08-17_10-43-34

然后去控制器中,把每个需要登录验证的ActionResult添加过滤器,如,
2025-08-17_10-48-11


asp.net mvc的路由设置,
2025-08-17_10-50-11

 免登录程序功能实现,大约如此,仍有一此细节未分享出来,没有明白的,可以咨询Insus.NET.