WebApi安全验证设计

先贴一段代码如下:

//调用接口前获取此签名文本传入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:开发调试阶段可去掉验证

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容