关于REST中做简单验证的思考
2013-10-18 18:04
225 查看
之前有位朋友留言问我是否对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出来。
对于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出来。
相关文章推荐
- 关于软件防止破解的思考,如何避免简单的跳转指令型的验证方法,如何设置更复杂的验证方式。
- 关于软件防止破解的思考,如何避免简单的跳转指令型的验证方法,如何设置更复杂的验证方式。
- 关于html、asp、php模板引擎、aspnet mvc、REST的一点思考
- 【微信支付】分享一个失败的案例 跨域405(Method Not Allowed)问题 关于IM的一些思考与实践 基于WebSocketSharp 的IM 简单实现 【css3】旋转倒计时 【Html5】-- 塔台管制 H5情景意识 --飞机 谈谈转行
- 关于用户密码验证的一点点思考
- 关于Hard Code的思考 - 程序员的管理不能简单使用制度
- 由一个简单的客户端间TCP/UDP通信程序引发的关于设计模式的思考
- 关于中南大学数据结构/C++课设题目的一点思考(一·简单题)
- 聊天记录——关于怀疑,思考,验证的进一步讨论
- 关于学习方向的一次简单思考
- 关于异常的简单思考
- 关于绕过上传验证的一些简单方法
- 关于基础和软硬件配合的简单思考
- 我只知道一点非常简单的关于MVC的验证
- 代码回顾:关于写代码时cout 和printf 输出16进制数的简单思考
- 关于进程页表和页目录是存放在内核空间,还是用户空间,低端还是高端内存的思考和验证
- 关于properties的简单思考
- 关于Spring-boot学习中对于@Controller和@RestController的简单记录
- 关于Unity3D中deltaTime的简单分析到引发思考
- 简单的关于身份证(15位或者18位)合法性验证