WildCat
V2EX  ›  问与答

服务器与客户端想明文通信,但是想在 HTTP header 里加个 token 字段,服务器验证请求是 client 发出而不是第三方伪造的,这个 token 应该用什么算法生成?

  •  
  •   WildCat · Feb 19, 2016 · 3812 views
    This topic created in 3917 days ago, the information mentioned may be changed or developed.

    其实就是 V2EX 客户端,由于客户端要求各位用账号密码登录,为了避嫌,不想和 app 服务器进行完全加密的通信。
    最近想做全文搜索(因为有人因为 app 不能搜索在 App Store 给我差评 =。=),但是全文搜索对服务器消耗很大,所以想限制仅仅只能从自己写的 iOS App 发出这个请求,想在请求的 HTTP header 里加个 token ,这个 token 如何生成?服务端如何校验?

    我对这个 token 的需求:
    - 最好是不可逆向的加密(避嫌),比如对时间(精确到分钟之类的)和 salt 进行 sha1 ,服务器也进行计算,比较结果
    - token 最好短一些,省的被怀疑里面包含用户名密码

    当然,其他方案也可以。
    感谢。

    10 replies  •  2016-02-20 21:12:11 +08:00
    kungs
    kungs
    Feb 19, 2016❤️1
    2
    jwt
    JiShuTui
    JiShuTui
    Feb 19, 2016❤️1
    3
    http://mp.weixin.qq.com/wiki/4/2ccadaef44fe1e4b0322355c2312bfa8.html
    参考微信公众号接口的消息验证算法
    oott123
    oott123
    Feb 19, 2016❤️1
    4
    不可逆向的是哈希吧。
    我觉得简单的带个时间戳和固定盐做个哈希就好了。
    stackpop
    stackpop
    Feb 19, 2016❤️1
    5
    rsa 签名
    mozutaba
    mozutaba
    Feb 20, 2016 via Android❤️1
    6
    json web token
    WildCat
    WildCat
    OP
    Feb 20, 2016 via iPhone
    7
    @oott123
    @JiShuTui

    时间戳加盐然后不可逆加密,这样时间戳也得加个单独字段放在请求里,这样服务端才能做验算吧?如果时间戳不传,会不会有很大误差?

    谢谢!
    oott123
    oott123
    Feb 20, 2016❤️1
    8
    @WildCat 传时间戳就好啦,这又不是什么敏感数据。
    大致的做法就是签名:
    例如你的 API 是 /search/?query=aabbcc
    然后你的盐是 WildCat112233
    当前时间戳是 22334455
    那么你可以把你的请求进行签名(摘要算法,而不是“不可逆加密”): sign=sha256("WildCat112233,/search/?query=aabbcc,22334455")
    最后得到的请求则是:
    /search/?query=aabbcc&timestamp=22334455&sign=deadcafexxx
    WildCat
    WildCat
    OP
    Feb 20, 2016 via iPhone
    9
    @oott123 十分感谢!
    JiShuTui
    JiShuTui
    Feb 20, 2016❤️1
    10
    而且传时间戳的好处是,你知道这个请求是什么时候发出的,跟服务器时间对比,比如说 5 分钟之内的请求你才去处理,超过 5 分钟的,直接当做错误请求。
    有一个危险是,有人喜欢把手机时间设置为提前 30 分钟,那么这个手机的所有请求都无法处理,解决办法是把 5 分钟改为 1 小时或者 2 小时,没有人会把手机设为提前 2 小时吧。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4782 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 45ms · UTC 01:57 · PVG 09:57 · LAX 17:57 · JFK 20:57
    ♥ Do have faith in what you're doing.