架构师_程序员

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 14044|回复: 67
打印 上一主题 下一主题

[WebAPI] 对Web API签名的封装,验证时间戳随机数密钥等

  [复制链接]
跳转到指定楼层
楼主
发表于 2016-10-25 13:18:39 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式

=================用下面这个======================

webapi通用签名的验证(二)
http://www.itsvse.com/thread-3810-1-1.html
(出处: 架构师)


=======================================

代码都是自己写的,网上找不到的!!!!

不多说,先上web.config的配置:
  1.     <add key="AppKey" value="c4ca4238a0b923820dcc509a6f75849b" />
  2.     <add key="TimestampInterval" value="10"/>
复制代码
appkey是通信密钥,TimestampInterval是时间戳允许的时间差。

下面是签名过滤器:

  1. /// <summary>
  2.     /// 签名过滤器
  3.     /// </summary>
  4.     public class SignatureAttribute : ActionFilterAttribute
  5.     {
  6.         /// <summary>
  7.         /// 进入api之前
  8.         /// </summary>
  9.         /// <param name="actionContext"></param>
  10.         public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext actionContext)
  11.         {
  12.             base.OnActionExecuting(actionContext);
  13.             SortedDictionary<string, string> requestDic = new SortedDictionary<string, string>();
  14.             var QueryString = ((HttpContextBase)actionContext.Request.Properties["MS_HttpContext"]).Request.QueryString;
  15.             foreach (var item in QueryString.AllKeys)
  16.             {
  17.                 //key都转为小写,防止在取key的时候出错
  18.                 requestDic.Add(item.Trim().ToLower(), QueryString[item]);
  19.             }
  20.             //时间戳timestamp  随机数nonce  签名signature
  21.             if (requestDic.Keys.Any(m => m.Equals("timestamp")) && requestDic.Keys.Any(m => m.Equals("nonce")) && requestDic.Keys.Any(m => m.Equals("signature")))
  22.             {
  23.                 //先判断时间戳
  24.                 long time = long.Parse(requestDic["timestamp"]);
  25.                 if (TimeHelp.IsTime(time, Convert.ToDouble(ConfigurationManager.AppSettings["TimestampInterval"])))
  26.                 {
  27.                     SignHelper sign = new SignHelper(ConfigurationManager.AppSettings["AppKey"]);
  28.                     bool result = sign.IsSign(requestDic);
  29.                     if (!result)
  30.                     {
  31.                         actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.OK, new ResultMessage<object>() { result = false, message = "签名不正确" });
  32.                     }
  33.                 }
  34.                 else {
  35.                     actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.OK, new ResultMessage<object>() { result = false, message = "时间戳不正确" });
  36.                 }                  
  37.             }
  38.             else {
  39.                 actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.OK, new ResultMessage<object>() { result = false, message = "缺少参数" });
  40.             }
  41.         }
  42.     }
复制代码


然后,返回的实体model类,代码如下:

  1. /// <summary>
  2.     /// 统一返回实体
  3.     /// </summary>
  4.     /// <typeparam name="Entity"></typeparam>
  5.     [Serializable]
  6.     [DataContract]
  7.     public class ResultMessage<Entity>
  8.     {
  9.         [DataMember]
  10.         public bool result { get; set; }

  11.         [DataMember]
  12.         public int code { get; set; }

  13.         [DataMember]
  14.         public string message { get; set; }

  15.         [DataMember]
  16.         public Entity data { get; set; }
  17.     }
复制代码


最后,附上时间戳和签名验证的方法:

游客,如果您要查看本帖隐藏内容请回复






上一篇:System.Net.Http.HttpRequestMessage”不包含“CreateResponse”的定义
下一篇:找不到包含 OwinStartupAttribute 的程序集
帖子永久地址: 

架构师_程序员 - 论坛版权1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
2、本站所有主题由该帖子作者发表,该帖子作者与架构师_程序员享有帖子相关版权
3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和架构师_程序员的同意
4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
7、架构师_程序员管理员和版主有权不事先通知发贴者而删除本文

码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
推荐
发表于 2016-10-26 14:34:53 | 只看该作者
支持一下                        
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
推荐
 楼主| 发表于 2017-4-20 16:19:52 | 只看该作者
a8048054 发表于 2017-4-20 16:17
顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶

哈哈 这个写的不对
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
推荐
发表于 2018-5-18 15:50:25 | 只看该作者
支持一下            
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
68#
发表于 2018-12-4 09:07:27 | 只看该作者
支持一下
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
回复

使用道具 举报

67#
发表于 2018-12-3 17:35:53 | 只看该作者
学习学习
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
回复

使用道具 举报

66#
发表于 2018-11-22 12:01:47 | 只看该作者
学习了~~~~~~~~~~
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
回复

使用道具 举报

65#
发表于 2018-10-15 16:36:08 | 只看该作者
要查看结果了
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
64#
发表于 2018-10-11 16:15:57 | 只看该作者
求隐藏代码,向大神学习
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
63#
发表于 2018-10-9 09:55:55 | 只看该作者
楼主的思路很好,认真学习
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
62#
发表于 2018-9-28 16:04:33 | 只看该作者
支持一下 
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
61#
发表于 2018-8-30 15:24:39 | 只看该作者
支持一下
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
回复

使用道具 举报

60#
发表于 2018-8-26 20:56:58 | 只看该作者
支持一下  看看大佬操作
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。

Mail To:help@itsvse.com

QQ|Archiver|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2018-12-18 06:49

Powered by Discuz! X3.4

© 2001-2014 Comsenz Inc.

快速回复 返回顶部 返回列表