介绍
使用asp.net怎么对消息的真实性进行验证?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
<强>验证消息的真实性强>
在MVC控制器所在项目中添加过滤器,在过滤器中重写
公共覆盖空白alt="使用asp.net怎么对消息的真实性进行验证">
注:服务器接收消息时,不再是签名而是msg_signature
微信服务器推送消息到服务器的HTTP请求报文示例
POST/目录/wxpush吗?msg_signature=477715 d11cdb4164915debcba66cb864d751f3e6&时间戳=1409659813,nonce HTTP/1.1=1372623149
主持人:qy.weixin.qq.com
方法重写,实现对消息的验证
调用微信接入时验证的方法,不过参数需要小改动一下,采用新建的数据模型
在行动方法或在控制器上添加过滤器属性
代码示例模型
///, & lt; summary>///才能,微信推送消息模型///才能,& lt;/summary> public 才能;class  WeChatMsgRequestModel {才能 ,,,public string timestamp {组,得到,,,} ,,,public string nonce {组,得到,,,} ,,,public string msg_signature {组,得到,,,} 以前,,}>过滤器
public class WeChatRequestValidAttribute : ActionFilterAttribute {才能 ,,,private const string Token =,“StupidMe"; ,,,public override void OnActionExecuting (ActionExecutingContext filterContext) ,,,{ ,,,,,//参数适配 ,,,,,Model.FormatModel.WeChatMsgRequestModel model =, new Model.FormatModel.WeChatMsgRequestModel (), {, nonce=filterContext.HttpContext.Request.QueryString [“nonce"], msg_signature=, filterContext.HttpContext.Request.QueryString [“msg_signature"], timestamp=, filterContext.HttpContext.Request.QueryString [“timestamp"],}; ,,,,,//验证 ,,,,,if (CheckSignature(模型) ,,,,,{ ,,,,,,,base.OnActionExecuting (filterContext); ,,,,,},,,,,, ,,,} ,,,private bool CheckSignature (Model.FormatModel.WeChatMsgRequestModel 模型) ,,,{ ,,,,,string 签名,,时间戳,,现时标志,,tempStr; ,,,,,//获取请求来的参数 ,,,,,signature =, model.msg_signature; ,,,,,timestamp =, model.timestamp; ,,,,,nonce =, model.nonce; ,,,,,//创建数组,将,令牌,,时间戳,,nonce 三个参数加入数组 ,,,,,string [], array =,{,令牌,时间戳,nonce }; ,,,,,//进行排序 ,,,,,Array.Sort(数组); ,,,,,//拼接为一个字符串 ,,,,,tempStr =, String.Join(““,,数组); ,,,,,//对字符串进行,SHA1加密 ,,,,,tempStr =, FormsAuthentication.HashPasswordForStoringInConfigFile (tempStr,“SHA1") .ToLower (); ,,,,,//判断signature 是否正确 ,,,,,if (tempStr.Equals(签名) ,,,,,{ ,,,,,,,return 真实; ,,,,,} ,,,,, ,,,,,{ ,,,,,,,return 假; ,,,,,} ,,,} 以前,,}>控制器代码
///, & lt; summary> ,,,///,日志助手 ,,,///,& lt;/summary> ,,,private static Common.LogHelper logger =, new Common.LogHelper (typeof (HomeController)); ,,,(Filters.WeChatRequestValid) ,,,public void 有效(Model.FormatModel.WeChatMsgRequestModel 模型) ,,,{ ,,,,,if (ModelState.IsValid) ,,,,,{ ,,,,,,,试一试 ,,,,,,,{ ,,,,,,,,,//判断是否是帖子请求 null null null null null null null null null null null null null null null null null null使用asp.net怎么对消息的真实性进行验证