签名算法验证通不过

阅读次数 1082

image.png

如: GET /api/sandbox/v3/3rd/files/ZWYIRUCDXBFGVLOOYVWGX3QO5AC6XQ5AZEKWK6I2PHKDYVA HTTP/1.1
Host: solution.wps.cn
User-Agent: Go-http-client/1.1
Access-Id: EX20230209CROQGQ
Authorization: WPS-2:EX20230209CROQGQ:07009f59fb204d5d9bbb7128d92606583fdf62ef
Content-Md5: 6666cd76f96956469e7be39d750cc7d9
Date: Fri, 10 Feb 2023 13:14:51 CST
X-App-Id: EX20230209CROQGQ
X-User-Query:
X-Weboffice-Token: Rr3nzyoEpzwKJ-Kv68C8AnqoBkc6eeXZ54yhtaCM9OXA_BC-c_NzB8ZVDf0zRdGgmcpRy032IkB52yjlZniS3A
Accept-Encoding: gzip

签名算法取值: SHA1值 的计算方式为 SHA1( AppSecret + Content-Md5 + Content-Type + Date) 十六进制表示方式, 小写
SHA1计算的值:"fpbrRSTSSfrGKnyXaBxzWHeVlmgNolXF" + "6666cd76f96956469e7be39d750cc7d9" +"application/json" + "Fri, 10 Feb 2023 13:14:51 CST"
计算结果:8a806e5b23d8465cdd32e087df5d4efc530802ce

与实际值:07009f59fb204d5d9bbb7128d92606583fdf62ef 不一致

6 Answers

您好,对于GET请求这里的 Content-Type 是空字符串,不是 application/json,这样计算就是实际值了,校验时候以实际请求里面相关头部字段的值为准

这样这个md5值就没有意义了,用同一个签名可以请求不同的file_id

这里不是get请求吗,对那个url从/api 到 VA的字符串进行MD5加密,得到的结果是bd1661ee03450a84d179bd3caabd9c50,这个应该用哪种md5加密,最好能给出java加密方式。 我现在用的是DigestUtils.md5Hex("/api/sandbox/v3/3rd/files/ZWYIRUCDXBFGVLOOYVWGX3QO5AC6XQ5AZEKWK6I2PHKDYVA");

@呃哦 我也被文档误导了,建议更新接口文档,

建议实际上线项目中的 secret 是放置在后端的, getAccessToken, getRefreshToken建议是一个后端接口, 对于此类接口之前有基本的用户 登录状态(或授权状态)校验, 保证是在已经授权的情况下才可以调用此接口.

为什么DigestUtils.md5Hex("/api/sandbox/v3/3rd/files/ZWYIRUCDXBFGVLOOYVWGX3QO5AC6XQ5AZEKWK6I2PHKDYVA")得到的Content-Md5不是6666cd76f96956469e7be39d750cc7d9而是bd1661ee03450a84d179bd3caabd9c50 按照案例给的: image.png