美文网首页
WebApi安全验证设计

WebApi安全验证设计

作者: 夜藍 | 来源:发表于2018-03-31 16:42 被阅读0次

    先贴一段代码如下:

    //调用接口前获取此签名文本传入HTTP请求头 ,api接收到签名信息后再用此方法验证传入参数是否有任何篡改,其中timestamp时间标记,salt随机盐,userid用户id,data用户传入的数据参数字符串(json或A=a&B=b)

    public static string getsign(string timestamp, string salt, string userid, string data)

     {

                var hash = System.Security.Cryptography.MD5.Create();

                //拼接签名数据

                var signStr = $"{timestamp}{salt}{userid}{data}"; 

                //将字符串中字符按升序排序

                var sortStr = string.Concat(signStr.OrderBy(c => c));

                var bytes = Encoding.UTF8.GetBytes(sortStr);

                //使用MD5加密

                var md5Val = hash.ComputeHash(bytes);

                //把二进制转化为大写的十六进制

                StringBuilder result = new StringBuilder();

                foreach (var c in md5Val)

                {

                    result.Append(c.ToString("X2"));

                }

                return result.ToString();

     }

    //获取随机盐

    private static string getsalt()

     {

            return Guid.NewGuid().ToString();

    }

    //当前时间

    private static string gettime()

    {

            return DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");

    }

    客户端调用API时,传入四个参数作为http请求头,分别是:

    Key:timestamp,Value:对称加密后的gettime()返回值;

    Key:salt,Value: getsalt();

    Key:userid,Value:对称加密后的userid值;

    Key:sign,Value:getsign();

    服务器接收四个参数后, 根据timestamp可以得到发起请求前到现在的时间差,判断是否过期。userid可以验证登陆身份,sign为请求前的签名,重新调用getsign()获取签名,是否还相等,以此判断任何参数是否被篡改。

    Ps:开发调试阶段可去掉验证

    相关文章

      网友评论

          本文标题:WebApi安全验证设计

          本文链接:https://www.haomeiwen.com/subject/baigcftx.html