钉钉H5w微应用鉴权

原文:钉钉H5w微应用鉴权

 1  ///// <summary>
 2         ///// 登录获取签名
 3         ///// </summary>
 4         ///// <param name = "url" > 获取的url </ param >
 5         ///// < returns > 成功时,返回签名信息</returns>      //引用system.web
 6         public signResultObject DDGetSign(string url)
 7         {
 8             try
 9             {
10                 String jsTicket = get_jsapi_ticket();
11                 if (jsTicket != "")
12                 {
13                     String noncestr = GetRandomString(20, true, true, true, false, "");
14                     String jsUrl    = HttpUtility.UrlDecode(url);//http://www.test.com/DDh5/index.html
15                     int timeStamp   = Convert.ToInt32((DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalSeconds);
16                     String plainTex = "jsapi_ticket=" + jsTicket + "&noncestr=" + noncestr + "&timestamp=" + timeStamp.ToString() + "&url=" + jsUrl;
17                     object SignObj = new object();
18                     SignObj = new
19                     {
20                         corpId = dingConst.Corpid,
21                         nonceStr = noncestr,
22                         timeStamp = timeStamp,
23                         signature = EncryptHelper.Sha1(plainTex).ToLower()
24                     };
25                     return new signResultObject { result = SignObj, code = 0, message = "获取成功!" };
26                 }
27                 else
28                 {
29                     return new signResultObject { result = null, code = 9, message = "获取Ticket失败!" };
30                 }
31             }
32             catch (Exception ex)
33             {
34              35                 return new signResultObject { result = null, code = 10, message = "获取Ticket出现异常!" };
36             }
37         }

1 public static string get_jsapi_ticket()
2 {
3   DefaultDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/get_jsapi_ticket");
4   OapiGetJsapiTicketRequest req = new OapiGetJsapiTicketRequest();
5   req.SetHttpMethod("GET");
6   OapiGetJsapiTicketResponse execute = client.Execute(req, getAccessTokenH5Trans());
7   return execute.Ticket;//注意:ticket不对,jsap鉴权会失败
8 }

 1        public static string GetRandomString(int length, bool useNum, bool useLow, bool useUpp, bool useSpe, string custom)
 2         {
 3             byte[] b = new byte[4];
 4             new System.Security.Cryptography.RNGCryptoServiceProvider().GetBytes(b);
 5             Random r = new Random(BitConverter.ToInt32(b, 0));
 6             string s = null, str = custom;
 7             if (useNum == true) { str += "0123456789"; }
 8             if (useLow == true) { str += "abcdefghijklmnopqrstuvwxyz"; }
 9             if (useUpp == true) { str += "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; }
10             if (useSpe == true) { str += "!\"#$%&‘()*+,-./:;<=>[email protected][\\]^_`{|}~"; }
11             for (int i = 0; i < length; i++)
12             {
13                 s += str.Substring(r.Next(0, str.Length - 1), 1);
14             }
15             return s;
16         }//生成签名的随机串

 1 using System;
 2 using System.Security.Cryptography;
 3 using System.Text;
 4 namespace Test.Code
 5 {
 6     public static class EncryptHelper
 7     {
 8         /// <summary>
 9         /// 基于Md5的自定义加密字符串方法:输入一个字符串,返回一个由32个字符组成的十六进制的哈希散列(字符串)。
10         /// </summary>
11         /// <param name="str">要加密的字符串</param>
12         /// <returns>加密后的十六进制的哈希散列(字符串)</returns>
13         public static string Md5(this string str)
14         {
15             //将输入字符串转换成字节数组
16             var buffer = Encoding.Default.GetBytes(str);
17             //接着,创建Md5对象进行散列计算
18             var data = MD5.Create().ComputeHash(buffer);
19
20             //创建一个新的Stringbuilder收集字节
21             var sb = new StringBuilder();
22
23             //遍历每个字节的散列数据
24             foreach (var t in data)
25             {
26                 //格式每一个十六进制字符串
27                 sb.Append(t.ToString("X2"));
28             }
29
30             //返回十六进制字符串
31             return sb.ToString();
32         }
33
34         /// <summary>
35         /// 基于Sha1的自定义加密字符串方法:输入一个字符串,返回一个由40个字符组成的十六进制的哈希散列(字符串)。
36         /// </summary>
37         /// <param name="str">要加密的字符串</param>
38         /// <returns>加密后的十六进制的哈希散列(字符串)</returns>
39         public static string Sha1(this string str)
40         {
41             var buffer = Encoding.UTF8.GetBytes(str);
42             var data = SHA1.Create().ComputeHash(buffer);
43
44             var sb = new StringBuilder();
45             foreach (var t in data)
46             {
47                 sb.Append(t.ToString("X2"));
48             }
49
50             return sb.ToString();
51         }
52     }
53 }

原文地址:https://www.cnblogs.com/lonelyxmas/p/12408965.html

时间: 2024-10-03 10:44:36

钉钉H5w微应用鉴权的相关文章

微服务鉴权

在微服务中,每个微服务都需要知道当前访问的用户是谁,拥有什么权限.一般有两种方案 第一种方案:用户登录后,将用户的权限信息存到redis中,用户访问某个url时在网关的前置过滤器里进行鉴权(网关只需要访问redis即可),当用户的权限信息变动后,异步通知给网关,网关监听到后更新到redis中. 第二种方案:采用springSecurity+Oauth2.0 原文地址:https://www.cnblogs.com/moris5013/p/12499700.html

asp.net c#语言实现钉钉鉴权验证

原文:asp.net c#语言实现钉钉鉴权验证 在做钉钉开发的时候,要想使用高级点的功能,需要钉钉鉴权验证,但是阿里给出的只有java和php的demo,没有c#,导致我在这方面耽误了好长时间,今天终于鉴权成功了 前台js代码,第一步必须引入钉钉的js <script src="//g.alicdn.com/dingding/dingtalk-jsapi/2.0.57/dingtalk.open.js"></script> dd.config({ agentId

.NET平台下,钉钉微应用开发之:获取userid

工作需求,开发钉钉微应用和小程序,之前有接触过支付宝小程序和生活号的开发,流程没有很大的差别,这里记录下我用ASP.NET MVC实现钉钉微应用的开发,并实现获取用户的userid.小弟我技术有限,本文中的一些命名或方法写的不好的,还请指点. 钉钉开发者平台上有各个平台的SDK,我也有下载对应的.NET版本的SDK,但是还没有全搞懂,我先用最土的办法:直接发起http请求,来获取我需要的数据,后面如果有时间我会把.NET的也补上. 1.注册钉钉微应用: 注册完成之后,继续完善下应用配置,如IP白

用java实现“钉钉微应用,免登进入某H5系统首页“功能”

一.前言 哈哈,这是我的第一篇博客. 先说一下这个小功能的具体场景: 用户登录钉钉app,点击微应用,获取当前用户的信息,与H5系统的数据库的用户信息对比,如果存在该用户,则点击后直接进入H5系统的首页,否则显示“您无权限”. 补充:又加了一个小需求,就是免登成功,会给该用户发条消息 我是参考钉钉开发文档实现的这个小功能,文档地址:https://ding-doc.dingtalk.com/doc#/serverapi2/clotub 二.准备工作 需要创建一个微应用:https://open-

微服务架构中的安全认证与鉴权

转载:http://www.bootdo.com/blog/open/post/125 从单体应用架构到分布式应用架构再到微服务架构,应用的安全访问在不断的经受考验.为了适应架构的变化.需求的变化,身份认证与鉴权方案也在不断的变革.面对数十个甚至上百个微服务之间的调用,如何保证高效安全的身份认证?面对外部的服务访问,该如何提供细粒度的鉴权方案?本文将会为大家阐述微服务架构下的安全认证与鉴权方案. 单体应用 VS 微服务 随着微服务架构的兴起,传统的单体应用场景下的身份认证和鉴权面临的挑战越来越大

移动端(钉钉微服务)webpack配置需要移除hash来解决应用更新后白屏的问题

钉钉微服务webpack配置调整方案 1: Vue CLI配置修改方法 a. 修改build下webpack.prod.config.js.去掉图中三处hash(.[chunkhash]): b. 修改build下webpack.base.config.js.去掉图中hash: 2: 非Vue CLI配置修改方法: 类似CLI,通常去除config文件中的output的filename和chunkFilename的hash值以及rules中对应的hash值. 原文地址:https://www.c

钉钉微应用发送消息

原文:钉钉微应用发送消息 微应用就是网站,钉钉自带的E应用难用,而且前端UI都不是很好,所以倾向使用网站来开发 string UrlUserID = "https://oapi.dingtalk.com/message/send?access_token=" + token; //获取自己的Token string PostData = "{ \"touser\":\"\", "; //职员代码,不知道是什么 去通讯录上查,多

钉钉——第三方应用嵌入钉钉【微应用】

2017年做了一款移动端手机web系统,用于公司的内部使用,使用了jquery mobile前端框架和后端SSM. 2018年11月份,要求将这款系统嵌入到钉钉平台,实现免登录. 踩了一堆坑...阿里云社区的也是问题多,成功解答的少. 总结一下: 第三方应用嵌入钉钉,钉钉仅仅提供 dingtalk.js 来给我们dd对象,dd对象的生命周期函数中可以利用相关code对钉钉账户信息进行相关请求, 我只做了userid获取,其他免登陆的工作全是三方应用的编码,与钉钉无关. 问题一:签名不正确,报错5

钉钉小程序微应用技术扫盲开发手册|钉钉小程序开发实战|钉钉小程序新手福利|梁凤财

钉钉小程序比较全的开发手册,一次扫盲,一路顺畅!. 图片为书中部分内容 下载地址: 链接:https://pan.baidu.com/s/1LuPbtRL2lUIKbvfjw2mEvw 提取码:pbvi 复制这段内容后打开百度网盘手机App,操作更方便哦 原文地址:https://www.cnblogs.com/ZenoLiang/p/12677463.html