美文网首页
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