提供 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 参数。
不知道大家是如何做的?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.