关于REST中做简单验证的思考

来源:互联网 发布:plsql跨数据库复制表 编辑:程序博客网 时间:2024/06/07 14:12

之前有位朋友留言问我是否对REST的验证有过研究,当时,我之前是用JBOSS来做基本的验证管理,每次请求都要带上验证信息。

对于WEB,这样做似乎有点不太优雅。

传统的http连接下,简单的web验证,是靠Session来做的。而Session其实是代表状态的,客户端的状态。REST是无状态的,服务资源无状态。

但是在访问的时候,由于Session的存在,就把客户的状态跟资源访问结合到一起了,有状态&无状态 == 有状态。

所以,Session其实是跟REST背道而驰的。

而关于REST的安全问题,全世界都在讨论。高级验证似乎已经有比较成熟的方法了,https+cache或者OAUTH。

而简单验证,怎么办呢?

个人的想法是,既然Session是有状态的,在解决安全问题中,其根本用途是保存用户信息,那么,我们是不是可以用如下的方法来解决呢?

1. 一个用户连接时,根据该用户唯一标示字段(例如数据库主键)加上当前时间,生成one-way hash,写入一个内存cache,并返回该token;如果cache中已存在该token,拒绝该链接。(每个token基本上都是唯一的,不可能产生两个一样的。如果是一样,必然是伪造的)

2. 页面在传递的时候同时传递该token,把该token带入URL或者请求中去;

3. 对于需要验证的资源,后面REST服务在接收到Request后,判断该token(读cache)。如果没有token或不对,返回登陆页面。


如果是分布式,那么使用分布式cache就OK了。


这是暂时的想法,后面如果有时间再去细想。如果写个POC出来。

原创粉丝点击