V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  LinJunzhu  ›  全部回复第 5 页 / 共 11 页
回复总数  219
1  2  3  4  5  6  7  8  9  10 ... 11  
这是因为 Android 的 webview 不支持自动下载 SSL 证书的中间证书,所以需要你的 SSL 证书把中间证书也整合进去
@also24

我自己实现过 HTTP 代理服务,所以对 HTTP 协议自认为还是理解的。

你说的 request body,我完全懂,并没有误会成 object -> request body。

为什么不想直接对 request body 进行签名,是因为部分 Http 库并不支持直接设置 json string 作为 request body,而是通过设置对象,再由 Http 库自己转为 json string -> request body。

因为想要一个约定俗成的方案,所以想看看大家的做法,现在我知道了哈哈

非常感谢你的答复 :)
@index90

我自己实现过 HTTP 代理服务,所以对 HTTP 协议自认为还是理解的。

你说的 request body,我完全懂,并没有误会成 object -> request body。

为什么不想直接对 request body 进行签名,是因为部分 Http 库并不支持直接设置 json string 作为 request body,而是通过设置对象,再由 Http 库自己转为 json string -> request body。

因为想要一个约定俗成的方案,所以想看看大家的做法,现在我知道了哈哈

非常感谢你的答复 :)
@fkdog 搜索了下,so 确实可以反编译, 但这不是 API 不加任何防护的理由:)
@also24 只能说你考虑不周到...
@index90 更正: payload 为 request body
@index90 你这个方案没有把 payload 放进去生成 Signature 的逻辑是吧?

其实我纠结的点在于:

若是在 application/json 的基础上进行交互

1、若 payload 内的 value 为数组、json 对象 时,那么就递归遍历排序, 这就满足需求了,但是在网上也没看到这样的实现方案,大家的 value 都是简单类型,所以不确定这样的实现是否合理
2、忽略 value 为数组、json 对象的逻辑计算,这就跟你的方案差不多。

所以才发了贴,问下大家的做法 :)
@fkdog Android 内的 so 可反不出来。

若客户端有 [不想将 API 简单的被暴露出去调用] 需求,这个就有用了,如 酒店类 APP 拿房价的接口
@geelaw

>这两个和你说的场景不同,考虑 A 公司向 B 用户通过支付宝收款,则收款请求是 A 的服务器发出的而不是 B 的设备发出的。要求 A 进行消息认证的目的是为了确保收款请求确实是 A 的意思而不是别人栽赃。

那我们回到这个场景,微信支付商户文档也是对参数进行了键值对的排序组合。

若 参数值为 一个 json 对象,而非基本类型(String, int),该如何做解析?
@index90

你看我上面的回复,就能看到,我指出了 JSON 文本,和 JSON 对象(各个语言有各自的类型),我对 http 的协议还是蛮熟悉的 :)

至于为什么我一直在说 json, 是因为现在 API 交互中, 双方基本约定成俗为 content_type: application/json

直接对 request body 进行验签不可取,还是那句话,hash key 是无序的,不同语言、不同库 解析和反解析,顺序不一定一致。

你可以看下微信支付商户的 API 文档: [https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=4_3] 也是进行 键值对的 排序组合, 只不过微信支付的 API 参数 value,都是基本类型
@also24 数组的有序性我倒是不担心, 唯一疑惑的点就在于 value 为对象时,该如何确保 客户端和服务端生成 sign 的逻辑是一致的。

因为哈希对象的 key 是无顺序的,同一段 json 文本,在最终解析出来的顺序是可能不一致的;

若 value 为对象,那么客户端在生成 token 时,该 value 转换为 json 文本是:

"{\"a\":\"a\",\"b\":\"b\"}"

服务端在生成 token 时,该 value 转换为 json 文本可能是:

"{\"b\":\"b\",\"a\":\"a\"}"

所以最终会导致验签失败。

我能想到的就是对 value 为复杂对象时,也进行 key=value 的形式排序,如此递归下去
@Vegetable 这也是我一开始的想法,但在网上搜索了好一阵,都没有个约定说怎么做,所以上来问问大家的做法。
@shoaly 哈希对象的 key 是无顺序的,同一段 json 文本,在最终解析出来的顺序是可能不一致的;

若 value 为对象,那么客户端在生成 token 时,该 value 转换为 json 文本是:

"{\"a\":\"a\",\"b\":\"b\"}"

服务端在生成 token 时,该 value 转换为 json 文本可能是:

"{\"b\":\"b\",\"a\":\"a\"}"

所以最终验签会失败
@billlee Hash 对象的 key 是无序的, 同一个 json 文本, 在不同系统 /语言 解析成 对象后,再格式化为 json 文本,key 的位置是有可能发生变化的,所以这段 json 文本的 digest/md5 也是有可能不一样的。
2020-01-06 22:32:26 +08:00
回复了 zaigzhu 创建的主题 问与答 沃派升级版(广东)套餐正式上线
升级后原套餐所有赠送赠款,语音及流量、低消活动等全部清 0

...
2020-01-05 15:19:11 +08:00
回复了 zjiecode 创建的主题 程序员 你有没有特别想吐槽的后端接口?
@xianyu0 一个接口允许 GET 和 POST 有什么好处?
2020-01-04 19:08:46 +08:00
回复了 zjiecode 创建的主题 程序员 你有没有特别想吐槽的后端接口?
@xianyu0 惊了,合着你写的 某个 API 都是同时支持 GET 和 POST 的?
2020-01-02 14:31:44 +08:00
回复了 crazytree 创建的主题 Apple PDD 的 AirPods 翻车了吗?还是苹果品控问题
我的也是,周围脏脏的缝合线。。。
2019-12-30 16:34:43 +08:00
回复了 roberts 创建的主题 求职 迫于生活不易,爬虫后端接活,远程兼职
有个爬虫的活,请联系我

wx: emh1ODg1NDAyOA==
这个转接头不是吸附。。。 是把两个 type-c 口给插上了
1  2  3  4  5  6  7  8  9  10 ... 11  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5869 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 23ms · UTC 02:18 · PVG 10:18 · LAX 18:18 · JFK 21:18
Developed with CodeLauncher
♥ Do have faith in what you're doing.