【发布时间】:2011-07-09 03:28:53
【问题描述】:
对于 RESTful Web 服务,我们说服务器不应存储任何状态。现在,对于每个请求,“用户”都必须经过身份验证,并且必须获得他/她希望执行的操作的授权。
现在每个请求都将包含该用户的授权数据。以下是我的困惑:
假设主页上有一个登录名和密码字段。用户输入发送回服务器的用户名/密码,用户验证,然后返回“一些令牌”。现在这个令牌在每次请求时都会发送到服务器。问题:
- 后端数据库是否需要单独的表来存储这些 按用户名索引的令牌?
- 假设令牌存储在数据库中,那么每个请求都需要进行数据库调用。这不会使数据库服务器成为高负载时的瓶颈吗?
- 如果令牌没有真正存储在数据库中,那么最好的“安静”存储位置是什么?
- 拥有会话可能并不平静,但我看不到宁静的身份验证/授权如何扩大(w.r.t. 以上几点)?
- 如果它不是令牌,那么是否需要来回发送用户名/密码? (听起来是个坏主意:)
我可能误解了 RESTful 身份验证/授权的概念。但是,对于每个 http 请求,“服务”是否真的需要访问数据库以验证凭据?有什么东西可以缩短这个过程并且仍然坚持宁静的原则吗?我可以考虑拥有一个存储详细信息的缓存,并且在服务器重新启动的情况下,它只会访问数据库。这只是可能使系统复杂化的性能优势(也许值得,不知道)。这是唯一的解决方案吗?
那么从 REST 的理论/概念的角度来看(不是必要的实现),这个问题是如何处理的(如果它是一个问题的话)?在您的专业经验中,您是如何处理这个问题的?这种方法的 Restful 程度如何?
我们正在开发 Restlet+J2EE+MySQL Restful Web 服务,我弹出了这个问题,但没有令人满意的答案(Google、Stackoverflow 等)我知道 HTTP 的基本和摘要授权,但我按照上面的解释,不熟悉存储/检索的内部结构。
【问题讨论】:
-
一般准则:使用磁盘/数据库的次数越少,应用程序可以实现的负载就越高。
标签: java web-services performance restful-authentication restlet