RESTful 提供 api 接口,但是我很燥的就是进行签名的时候 GET 方式要怎么签?

2017-12-12 21:47:30 +08:00
 pizida

RT. 如果是 POST 请求,那么很简单,所有参数我一股脑儿的进行哈希加密生成签名。 但是如果遇到 GET 请求,按照 restful 的用法,比如 api.test.com/users/1?type=2,这个 type 获取来签名很正常,但是这个 users/1 她实际上也是在 GET 参数里面的,我也可以 parse 后一起加密,但是这样子对调用方就很麻烦啊,他可能很困惑,我传递的参数是 type,为什么要把 users/1 也进行加密,这个 users/1 对于调用放来说是请求路径,并不是 GET 参数,但实际上对服务方这个也是 GET 参数,那么问题来了,这个 users/1 到底要不要参与签名,如果参与,这样子很容易有坑,调用方认为这不是 GET 参数,如果不参与,这签名也就没意义了,任意改变 user/id 里面的 id,这样子签名都能通过。

各位大神都是怎么处理在使用 restful 前提下,这个签名问题的!!求教!!

9434 次点击
所在节点    程序员
36 条回复
LeeSeoung
2017-12-13 11:19:48 +08:00
api + 参数一起签名
codeyung
2017-12-13 11:27:07 +08:00
header 或者 JWTJsonwebtoken https 一套就行
njwangchuan
2017-12-13 14:00:34 +08:00
https + Basic Auth,足以搞定。
对于 Post 请求重复提交问题,每个请求里面客户端自己生成一个 uniqueRequestId ( UUID )参数,用于判断重复提交问题。
一些大型交易网站的 API 接口都能这么干,没必要搞那么复杂。
flyingghost
2017-12-13 16:26:47 +08:00
你的需求里既然有防篡改,那其实就是 https 解决的问题。和内不内网毫无关系啊。
而且上个 https 又不复杂。
ipwx
2017-12-13 16:32:02 +08:00
安全领域,最忌讳自己造轮子。你如果要防止重放,用 requestId 就可以了。要是为了防篡改 /防窃听,就这种初级校验方式,真的有用吗?
pizida
2017-12-13 16:40:56 +08:00
@ipwx 有什么好轮子推荐吗?
pizida
2017-12-13 16:41:25 +08:00
@flyingghost 好的,感谢回答,会考虑用 HTTPS
pizida
2017-12-13 16:42:07 +08:00
@codeyung JWTJsonwebtoken 看起来不错,研究下
pizida
2017-12-13 16:42:55 +08:00
@njwangchuan 我这个主要不是给客服端请求,是给其他机器提供的后台服务
8355
2017-12-13 17:55:28 +08:00
按照你的需求 /users/1 部分不需要加入签名 只要给 type=2 签名就可以了.
具体原因看 RESTful API 设计指南
codeyung
2017-12-13 18:40:49 +08:00
@pizida 像我做 open API 给其它用户用 都是首先作一个 oauth2 那个 token 在验证 url 的访问权限 如果安全再返回数据
TIGERB
2017-12-13 18:52:46 +08:00
get 不用签了吧,必要的验证下登录状态不就行了么
ipwx
2017-12-13 19:01:21 +08:00
@pizida https 呗。
odirus
2017-12-13 19:20:52 +08:00
参数签名,我使用得比较多的场景是服务与服务之间的认证。

例如自己系统的服务端调用别人的支付系统,主要方便对调用方的鉴权,防止其他人恶意调用接口(前提是颁发的密钥别被第三方窃取了)
liukefeng2008
2017-12-13 19:30:52 +08:00
solee
2017-12-13 21:54:04 +08:00
jwt token 放 Header

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/414213

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX