首页 > Windows开发 > 详细

web api 签名验证

时间:2015-11-26 12:31:51      阅读:377      评论:0      收藏:0      [点我收藏+]

 

        protected bool Vertify(string JsonData, BaseResponseModel resultEntity)
        {
			
            if (ValidateRequest(JsonData, resultEntity)) //签名验证
            {
				if (ModelVerification())
                {
                    return true;
                }
                resultEntity._StatusCode = Common.StatusCode.VIOLATION_FAIL;
                resultEntity._StatusCode.Description = ValidateFailMessage();
                return false;
            }
            resultEntity._StatusCode = Common.StatusCode.SIGN_EXCEPTION;
            return false;
        }

  

protected bool ValidateRequest(string JsonData, BaseResponseModel resultEntity)
        {
            if (ConfigHelper.GetInstance().SignVerificationInd == "N")
            {
                return true;
            }
            var dicParams = new Dictionary<string, object>();
            dicParams = ConvertHelper.ToDictionary(JsonData);

            return Vertify(dicParams, resultEntity);
        }

  

        protected bool Vertify(Dictionary<string, object> dicParams, BaseResponseModel resultEntity)
        {
            var result = true;

            if (dicParams == null || dicParams.Count == 0)
            {
                result = false;
                resultEntity._StatusCode = Common.StatusCode.SYSTEM_EXCEPTION;
            }
            else
            {
                var sortedDicParams = new SortedDictionary<string, string>();
                var sign = string.Empty;
                foreach (var key in dicParams.Keys)
                {
                    if (key != "sign")
                    {
                        if ((dicParams[key].ToString2() != string.Empty) &&
                            (dicParams[key].ToString2() != "0001-01-01T00:00:00"))
                        {
                            sortedDicParams.Add(key, dicParams[key].ToString2());
                        }
                    }
                    else
                    {
                        sign = dicParams[key].ToString2();
                    }
                }

                var linkString = string.Empty;
                var localSign = Sign.GetSign(sortedDicParams, ref linkString);
                if (localSign != sign.ToUpper())
                {
                    //验签失败
                    result = false;
                    //resultEntity.ReturnCode = "SIGN ERROR";
                    //resultEntity.ReturnMsg = "签名错误!";

                    //resultEntity._StatusCode = TopOne.Web.APIs.EnterpriseAdmin.Common.StatusCode.SIGN_EXCEPTION;
                }
            }

            return result;
        }
        public static string GetSign(SortedDictionary<string, string> dicArray, ref string linkString)
        {
            linkString = string.Empty;

            linkString = CreateLinkString(dicArray);

            var vendorsecret = ConfigurationManager.AppSettings["secret"];
            var linkStringKey = string.Format("{0}{1}{0}", vendorsecret, linkString);

            //参数中bool类型的转换
            linkStringKey = linkStringKey.Replace("True", "true");
            linkStringKey = linkStringKey.Replace("False", "false");


            return ToponeMD5.GetUpper(linkStringKey);
        }

        private static string CreateLinkString(SortedDictionary<string, string> dicArray)
        {
            var prestr = new StringBuilder();
            foreach (var temp in dicArray)
            {
                if (temp.Key.ToLower() != "sign")
                {
                    prestr.Append(temp.Key);
                    prestr.Append(temp.Value);
                }
            }
            return prestr.ToString();
        }

 

web api 签名验证

原文:http://www.cnblogs.com/hbsfgl/p/4996933.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!