使用asp.net怎么对消息的真实性进行验证

  介绍

使用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

方法重写,实现对消息的验证

调用微信接入时验证的方法,不过参数需要小改动一下,采用新建的数据模型

使用asp.net怎么对消息的真实性进行验证

使用asp.net怎么对消息的真实性进行验证

在行动方法或在控制器上添加过滤器属性

使用asp.net怎么对消息的真实性进行验证

代码示例模型

///, & 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怎么对消息的真实性进行验证