其实就是 V2EX 客户端,由于客户端要求各位用账号密码登录,为了避嫌,不想和 app 服务器进行完全加密的通信。
最近想做全文搜索(因为有人因为 app 不能搜索在 App Store 给我差评 =。=),但是全文搜索对服务器消耗很大,所以想限制仅仅只能从自己写的 iOS App 发出这个请求,想在请求的 HTTP header 里加个 token ,这个 token 如何生成?服务端如何校验?
我对这个 token 的需求:
- 最好是不可逆向的加密(避嫌),比如对时间(精确到分钟之类的)和 salt 进行 sha1 ,服务器也进行计算,比较结果
- token 最好短一些,省的被怀疑里面包含用户名密码
当然,其他方案也可以。
感谢。
1
XiaoxiaoPu 2016-02-19 17:12:26 +08:00 1
|
2
kungs 2016-02-19 17:14:01 +08:00 1
jwt
|
3
JiShuTui 2016-02-19 17:16:33 +08:00 1
|
4
oott123 2016-02-19 18:35:54 +08:00 1
不可逆向的是哈希吧。
我觉得简单的带个时间戳和固定盐做个哈希就好了。 |
5
stackpop 2016-02-19 18:41:07 +08:00 1
rsa 签名
|
6
mozutaba 2016-02-20 13:56:11 +08:00 via Android 1
json web token
|
7
WildCat OP |
8
oott123 2016-02-20 20:49:06 +08:00 1
@WildCat 传时间戳就好啦,这又不是什么敏感数据。
大致的做法就是签名: 例如你的 API 是 /search/?query=aabbcc 然后你的盐是 WildCat112233 当前时间戳是 22334455 那么你可以把你的请求进行签名(摘要算法,而不是“不可逆加密”): sign=sha256("WildCat112233,/search/?query=aabbcc,22334455") 最后得到的请求则是: /search/?query=aabbcc×tamp=22334455&sign=deadcafexxx |
10
JiShuTui 2016-02-20 21:12:11 +08:00 1
而且传时间戳的好处是,你知道这个请求是什么时候发出的,跟服务器时间对比,比如说 5 分钟之内的请求你才去处理,超过 5 分钟的,直接当做错误请求。
有一个危险是,有人喜欢把手机时间设置为提前 30 分钟,那么这个手机的所有请求都无法处理,解决办法是把 5 分钟改为 1 小时或者 2 小时,没有人会把手机设为提前 2 小时吧。 |