API 验证签名时,若 payload 的 json value 为复杂对象时该如何处理?
提供 API 给客户端使用时,为了验证是客户端发起的请求,并且保证请求中不被用户恶意串改,我们一般会这么做:
客户端:
1、将请求参数按照 key 字典序排序,将所有 key=value 进行拼接 2、将 [ secret ] [ nonce ] [ timestamp ] 和上述的参数进行拼接
最终将这个字符串通过 sha1/或其他算法 生成一个 token
服务端:
接受到对应的参数时,根据同样的逻辑,生成 token,验证 token 是否一致。
若是下面的参数,会拼接成:aello=world&bello=java
{ "aello": "world", "bello": "java }
但是若 value 是数组,或是一个对象时,该如何拼接呢?
{ "aello": "world", "bello": { "hi": "hi" } }
翻看了微信和支付宝的文档,两者的参数类型都是基本类型,无数组和对象,但是我们自己在实现过程中,偶尔难免会有复杂结构的 json 参数。
不知道大家是如何做的?