询问服务器 token 的实现方案

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

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

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

11317 次点击
所在节点    Java
56 条回复
q84629462
2015-07-02 15:52:58 +08:00
不销毁session不就可以了吗
xx314327475
2015-07-02 15:56:23 +08:00
@q84629462 不销毁session服务器内存可能吃不消,而且我这个服务器在没有访问的时候会自动休眠,session也会被销毁.
xx314327475
2015-07-02 15:56:59 +08:00
@q84629462 可以不用token么?
xx314327475
2015-07-02 15:57:30 +08:00
@q84629462 可以不用session么?
ipconfiger
2015-07-02 15:59:09 +08:00
直接用oAuth2的方案不行么?
hahasong
2015-07-02 16:00:28 +08:00
已经登录了为何还要带token识别状态,在服务端根据用户身份处理就好了
q84629462
2015-07-02 16:01:35 +08:00
@xx314327475 那就放数据库呗,不就保存一个字符串而已
BuilderQiu
2015-07-02 16:01:41 +08:00
用户主要信息ID之类的+过期时间+balabala+...
加密生成token,客户端保存

请求时过滤器解密验证
xx314327475
2015-07-02 16:01:44 +08:00
@ipconfiger oAuth2是不是有些过于复杂了?
xx314327475
2015-07-02 16:04:07 +08:00
@hahasong 因为http是无状态的,token是用来校验用户权限的,告诉服务器这用户已经登录了,不用再校验了,具体用他的原因主要是防止其他人盗用api,而且每次app请求都不能带上用户名和密码吧?
xx314327475
2015-07-02 16:04:56 +08:00
@q84629462 每次请求都去数据库查一次么?放内存中如何管理呢?什么时候销毁呢?
xx314327475
2015-07-02 16:05:38 +08:00
@BuilderQiu 客户端保存我是清楚的,token如何生成我也是明白的,我不明白是服务器是如何保存用户的登录状态.
glasslion
2015-07-02 16:11:22 +08:00
@xx314327475 一个session才多少大小,就能把你们服务器内存给吃光了?
xx314327475
2015-07-02 16:12:31 +08:00
@glasslion 不是怕吃光,但是这种实现感觉总是不好的
billlee
2015-07-02 16:12:44 +08:00
我自己做的小项目,试过用 redis 保存 session, 感觉还不错。可以设置过期时间,到期 redis 会自动销毁。
q84629462
2015-07-02 16:13:06 +08:00
token嘛,多数一个月,有的一年,要看你的账号使用条件,例如异地ip立即销毁,一段时间内多个IP使用立即销毁之类的
xx314327475
2015-07-02 16:13:53 +08:00
@billlee 可是你怎么知道什么时候销毁session呢?session销毁了,我app的用户怎么办?
xx314327475
2015-07-02 16:15:03 +08:00
@q84629462 你的意思是这个不用服务器的session id来做,自己在服务器实现下,然后根据你所说的算法,来用程序销毁
q84629462
2015-07-02 16:17:54 +08:00
@xx314327475 token不就为了让用户一次登录长时间免登录么,当然要有安全机制,网络传输被抓包别人就可以用了,毕竟是明文的玩意
hahasong
2015-07-02 16:18:28 +08:00
@xx314327475 登录态跟web一样,登录完了写sesseion 和 cookie 不就完了,每次请求带上cookie

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

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

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

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

© 2021 V2EX