分享

服务端token 怎样设计

 quasiceo 2015-06-24

服务端token 怎样设计

Ruby · whatisruby · 于 2 年前发布 · 最后由 leonkaiyu2 年前回复 · 4544 次阅读
2943

最近要给 手机应用客户端提供api
目前还不确定用哪些,或则sinatra还是 grape?,求推荐!!

回到主题
因为api 需要权限控制,所以有些api需要带上token。
请教大家:服务端产生的token,一般是放在数据库,每次请求api都查询一次
还是放在内存中,然后设计过期时间?

麻烦大家提供靠谱点的思路

(我看了下ruby-china的代码,好像直接存入user表,每次请求查询一次的)

共收到 16 条回复
D62d782bd0ed42394797cff8a9adae70
woaigithub · #1 · 2 年前 喜欢

内存和数据库都需要,内存可以加快请求速度,减少数据库请求。

D62d782bd0ed42394797cff8a9adae70
woaigithub · #2 · 2 年前 喜欢

产生过程和验证过程可以参考oauth的token验证和授权过程。

D62d782bd0ed42394797cff8a9adae70
woaigithub · #3 · 2 年前 喜欢

或者是一个简单的,我们现在使用的就是token。
在访问任何服务之前都需要先访问一个获取token的服务,服务在后台生成一个token,存入数据库。
后续的服务访问,都需要传入username和token,服务会判断token是否和username匹配,token是否过期。
过期用的定时服务,定时删除超时的token,下次验证就可以做过期提示了。

D62d782bd0ed42394797cff8a9adae70
woaigithub · #4 · 2 年前 喜欢

这个比较简单。
可以增加一个授权的过程。
就是client提交key-secret,验证client是否合法client。
如果是合法client,返回一个未授权的token,然后再用这个token请求一个授权的token。
使用授权的token访问服务。

8
hooooopo · #5 · 2 年前 喜欢

session验证满足不了你的需求么

E9abf4a0c4ccb3e2a8828d30ef5a717c
allenwei · #6 · 2 年前 喜欢

个人建议用sinatra,更灵活
token的话,不如直接上oauth? https://github.com/songkick/oauth2-provider

2943
whatisruby · #7 · 2 年前 喜欢

#4楼 @woaigithub 后台服务的数据库应该还是需要用到内存数据库吧
#5楼 @hooopo session怎么用?
#6楼 @allenwei 刚接触ruby不久,不是很理解咋用这个啊 - -!

D62d782bd0ed42394797cff8a9adae70
woaigithub · #8 · 2 年前 喜欢

用内存数据库是因为可以加快访问和验证,现从数据库获取验证也是可以的。

27e5687777d1224f8353b1c103f5bf25
sparkle · #9 · 2 年前 喜欢

每次请求都要带上其实是session
token一般是用来做一次验证,短时间过期,验证通过之后换session
session解决方案很多,不用自己做了

2943
whatisruby · #10 · 2 年前 喜欢

#8楼 @woaigithub
#9楼 @sparkle 嗯嗯,哪里有现成的demo 让我喵一眼啊 呵呵

27e5687777d1224f8353b1c103f5bf25
sparkle · #11 · 2 年前 喜欢

rails里面就有很多session
内存、文件、数据库、dbr、redis都有

2943
whatisruby · #12 · 2 年前 喜欢

#11楼 @sparkle session 应该保存不了吧,手机客户端请求服务端,没有浏览器的支持,估计session 是马上消失的,我都打算禁用session呢

27e5687777d1224f8353b1c103f5bf25
sparkle · #13 · 2 年前 喜欢

不是说通过浏览器的cookie传进来的session id才叫session
session id可以自己的代码传进来

2943
whatisruby · #14 · 2 年前 喜欢

#13楼 @sparkle 恩,所以这个session 只是名字上是session而已,对吧
我现在打算的做法是:把key(token):value(user_id) 放在redis内存数据库
然后设置这个key的过期时间,这个做法靠谱不?

2943
whatisruby · #15 · 2 年前 喜欢

我前面的做法不对,我理解 13楼 sparkle 的说法了

2873
Guest · #16 · 2 年前 喜欢

#13楼 @sparkle 我一直非常关注这块,学习Ruby也是因为ROR的RESTful风格在API开发时候的首选。其实最成熟的解决方案是XAuth,因为通过公钥和私钥对 生成(混入Action)的token目前相对安全度很高。如果使用session_id,安全会存在截获session_id以后,非法侵入。

欢迎讨论!

  • #6楼 @allenwei 有oauth2-provider的实际项目经历吗?不知道有没有XAuth版本?性能如何?

https://dev.twitter.com/docs/oauth/xauth

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多