询问服务器 token 的实现方案

2015-07-02 15:48:38 +08:00
 xx314327475

目前笔者做了一款iOS的App,需要访问服务器资源,当App登录以后,服务器端验证通过后,会返回一个访问token,用于校验后序的api访问操作,App以后所有的请求都会带上这个token参数,现在想问下,这个token如何实现?

有朋友建议我使用session的session id来实现这个token,但是session销毁后,用户就必须重新登录了,你们有什么好的办法么?

11368 次点击
所在节点    Java
56 条回复
xx314327475
2015-07-02 17:22:14 +08:00
@nisnaker 😄
nisnaker
2015-07-02 17:27:45 +08:00
@xx314327475 其实你问的问题就是这个token怎么办,如果做成加解密的话服务端就什么都不用存。
至于这个过期时间,就是当前的时间戳减去token里存的时间戳,要不要判定为过期完全在服务器端控制,方便优化。
而且这个多久过期也不用在这里讨论,看你的具体业务,你可以设成1年有效,大不了app跟支付宝一样做下手势验证;或者5分钟过期,过期之后自动再次登录重新获取token以免用户体验太差。
shaobenbin
2015-07-02 19:12:58 +08:00
zyx89513
2015-07-02 19:37:14 +08:00
存在数据库, 用 memcache 缓存. 直接存到 redis 也可以
zhuangzhuang1988
2015-07-02 19:51:17 +08:00
用这个库即可 http://pythonhosted.org/itsdangerous/ 也就是@BuilderQiu 的解决方案, 具体在http://book.douban.com/subject/26274202/ 中第14章有. 另外还可以用于邮件验证
jedrek
2015-07-02 20:11:50 +08:00
@BuilderQiu @nisnaker @hahasong @xx314327475
若认证信息不存储的话,会有些问题。
一个用户有两个设备,在其中一个设备上改掉密码,另一个设备的token如何失效?
换种说法,token泄露了,我改密码后,如何让泄漏后的token失效?
ClearGC
2015-07-02 20:26:23 +08:00
@jedrek 修改密码时清除该用户在后台(内存、数据库等)的token记录。
jedrek
2015-07-02 20:34:16 +08:00
@ClearGC 是的,认证信息还是得存储才行的
zhujinlong
2015-07-02 21:04:50 +08:00
服务端放内存或redis或存db,客户端放headers
qianlifeng
2015-07-02 21:15:04 +08:00
jsob web token
qianlifeng
2015-07-02 21:15:15 +08:00
json web token http://jwt.io/
freeznet
2015-07-02 21:18:41 +08:00
bkmi
2015-07-02 21:36:04 +08:00
我们用UUID当token,失效机制大概就像楼上说的,登录重新生成,过期失效,修改密码失效,还有些安全规则失效
nisnaker
2015-07-02 21:47:44 +08:00
@jedrek 服务端记住这个改密码的时间点,早于这个点的token失效。
Comdex
2015-07-03 12:39:08 +08:00
@nisnaker
@q84629462
@nisnaker
@hahasong 新手能请问一下为了防止重放攻击什么的,貌似要用到什么签名,那个签名是怎么生成的,服务器端又怎样验证的,怎么与token一起使用?谢谢
aftereclipse
2015-07-03 17:40:12 +08:00
token放redis和数据库 登录过程采用https或者自定义的加密方式,返回token+过期时间给客户端 。后续所有api调用都校验token。这样分布式部署应用的时候就无需考虑session问题,所有服务器统一从redis中获取校验token就好了

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

https://www.v2ex.com/t/202801

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

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

© 2021 V2EX