• Http请求加签、验证操作


    加签、验签的作用

    常见的http请求交互过程中,请求参数通过url或者request body等形式传输。但是由于http请求的开放性,使得请求参数很容易被拦截篡改。因此,需要对请求参数进行加签,然后在请求接受方对请求参数进行验签,确保两个签名是一样的,验签通过之后请求处理方就可以进行业务逻辑处理了。

    但是,加签和验签只能解决请求传输过程中参数篡改的问题,并不能解决敏感参数传输的安全性问题。

    加签、验签的处理思路

    加签和验签就是在请求发送方将请求参数通过加密算法生成一个sign值,放到请求参数里;请求接收方收到请求后,使用同样的方式对请求参数也进行加密得到一个sign值,只要两个sign值相同,就说明参数没有被篡改。

    签名参数sign生成的方法

    1. 将所以头参数(注意时所有参数),出去sign本身,以及值是空的参数,按参数键字母升序排序。
    2. 然后把排序后的参数按参数1值1参数2值2......参数n值n(这里的参数和值必须是传输参数的原始值,不能是经过处理的,如不能将"转成"后再拼接)的方式拼接成一个字符串。
    3. 把分配给接入方的验证密钥key拼接在第2步得到的字符串前面。
    4. 在上一步得到的字符串前面加上密钥key(这里的密钥key是接口提供方分配给接口接入方的),然后计算md5值,得到32位字符串,然后转成大写,得到的字符串作为sign的值放到请求参数里。

    举例

    现在假设需要传输的数据是:http://xxx.com/api/guest/rechargeNotify?p2=v2&p1=v1&method=cancel&p3=&pn=vn(实际情况最好是通过post方式发送)

    1. 拼接字符串,首先去除值是空的参数p3,剩下p2=v2&p1=v1&method=cancel&pn=vn,然后按参数名字符升序排序得到字符串:method=cancel&p1=v1&p2=v2&pn=vn。
    2. 然后做参数名和值的拼接,最后得到methodcancelp1v1p2v2pnvn。
    3. 在上面拼接得到的字符串前面加上验证密钥key,假设是abc,得到新的字符串abcmethodcancelp1v1p2v2pnvn。
    4. 将上面得到的字符串进行md5计算,假设得到的是abcdef,然后转为大写,得到ABCDEF这个值即为sign签名值。最终产生的url应该如下:http://xxx.com/api/guest/rechargeNotify?p2=v2&p1=v1&method=cancel&p3=&pn=vn&sign=ABCDEF
    5. 注意:计算md5之前请确保请求发送方和接收方使用的字符串编码一致,比如统一使用utf-8编码,如果编码方式不一致则计算出来的签名会校验失败。

    验签过程

    其实就是将请求url按照上述的规则进行同样的操作,计算得到参数的签名值,然后和参数中传递的sign值进行对比,如果一致则校验通过,否则校验不通过。

    阿里云加签方式

    签名机制

    参考优秀博文

    1. HTTP对外接口,如何增加签名机制
  • 相关阅读:
    近一年工作感悟2
    项目管理实践感想
    领导力思考
    ASP.NET内置对象
    asp.net 在GridView控件上实现修改、添加、删除
    asp.net导出excel和打印指定内容的简单代码
    js让网页适应屏幕大小
    只能选择GridView中的一个CheckBox(单选CheckBox)
    JQuery实现拖拽draggable()方法
    获取XML文件中的值
  • 原文地址:https://www.cnblogs.com/boothsun/p/7460105.html
Copyright © 2020-2023  润新知