接口签名中的空字符剔除和参数排序原理
许多三方接口在签名过程中都会遵循如下规则:
- 剔除空字符
- 参数按ASCII 码升序排序
这种做法看似约定俗成,但实际上有着客观的技术原因。
空字符剔除
如果将空字符包含在签名中,当接口字段较多且包含大量空字段时,字符串拼接和计算签名所需的资源将显着增加。原始数据越长,开销越大。对于高流量应用来说,这种开销累积起来十分可观。
此外,空字符的处理容易产生歧义。例如,一个字段可能未传值而为空,或者确实传了空值。这在程序处理上存在差异,可能会导致误解和签名错误。
参数排序
Object 或 Map 等数据结构本身是无序的。异构系统使用不同的语言、库和序列化方式,这会导致序列化后的字符串顺序不一致。因此,需要通过某种规则让双方使用一致的签名方式,而对字段进行排序是最简单的方法。
IETF 组织在 “HTTP 签名” 草案中提出了相关的签名方式,其中包括参数排序和空字符剔除。而这种签名方式最早可以追溯到 2007 年 OAuth 标准制订时提出的 “OAuth 请求体散列” 草案。
以上就是接口签名为什么需要剔除空字符并进行参数排序?的详细内容,更多请关注php中文网其它相关文章!
版权声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系 yyfuon@163.com