Http之验签

应用程序的web后台的服务,为了优化流量资源配置,预防服务攻击,一般会对业务资源请求进行签名验证(简称验签)

http验签设计一般需要以下几步:

  1. 设计一套自定义的签名算法,这个算法中一般涉及到用户token,时间戳,HTTP请求的body等。 时间戳是必选项,因为它可以增加破解签名算法的难度
  2. 客户端根据算法生成签名,通过Header或者Cookie发送给服务端
  3. 服务端根据算法验证签名的合法性,从而确定此请求是否有访问权限

这其中可能会遇到的坑:
由于客户端与web后台一般是采用不能语言开发。在算法得到的一串加密后的字符串时,往往会有一些特殊的字符(eg:’=’,’#’,…).而不同语言在对一些特殊字符进行处理的时候有一些差异。
例如:我们客户端采用C#,后台采用java。为了使签名一致,客户端需要对签名值进行urlEncode之后再发送给服务端。

在工具使用上需要注意的点,不能的软件对参数值的处理方式不一样,例如: Postman会对参数值进行urlEncode,而Fiddler不会。 所以你会发现算好的签名放到Postman中可以正常通过验签,而放fiddler中则出错。