架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 235231|回复: 114

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

  [复制链接]
发表于 2016-10-25 13:18:39 | 显示全部楼层 |阅读模式
QQ截图20161025131231.jpg
=================用下面这个======================

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 的程序集
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2016-10-26 14:34:53 | 显示全部楼层
支持一下                        
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2017-4-20 16:19:52 | 显示全部楼层
a8048054 发表于 2017-4-20 16:17
顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶

哈哈 这个写的不对
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2019-8-8 19:04:04 | 显示全部楼层
奥德赛所所所所所所所所所所所所所所所所所所所所所所所所所所所所所所所所所所所
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2017-4-11 22:59:25 | 显示全部楼层
我要看隐藏的代码
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2017-4-20 16:17:04 | 显示全部楼层
顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2017-5-9 20:18:03 | 显示全部楼层
255555555555555555555
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2017-5-24 17:16:45 | 显示全部楼层
我要看隐藏的代码
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2017-6-9 10:32:48 | 显示全部楼层
我要看隐藏的代码
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2017-6-13 11:02:14 | 显示全部楼层

我要看隐藏的代码
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2017-6-14 19:44:46 | 显示全部楼层
在做web api 安全认证模块 支持一下
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

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

Mail To:help@itsvse.com

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

GMT+8, 2025-2-5 22:42

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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