RESTful 身份验证 - 在高负载下导致性能不佳?
对于 RESTful Web 服务,我们说服务器不应该存储任何状态。现在,对于每个请求,“用户”都必须经过身份验证,并且必须对他/她希望执行的操作进行授权。
现在,每个请求都将包含该用户的授权数据。以下是我的困惑:
假设主页上有登录名和密码字段。用户输入用户名/密码,该用户名/密码被发送回服务器,用户验证,然后返回“一些令牌”。现在,此令牌在每次请求时都会发送到服务器。问题:
- 后端数据库是否需要有一个单独的表来存储这些按用户名编制索引的令牌?
- 假设令牌存储在数据库中,则每个请求都需要进行数据库调用。这难道不会使数据库服务器在高负载时期成为瓶颈吗?
- 如果令牌没有真正存储在数据库中,那么存储它的最佳“宁静”位置是什么?
- 拥有会话可能不是安宁的,但是我看不到如何安宁的身份验证/授权扩展(w.r.t.上述几点)?
- 如果它不是令牌,那么用户名/密码是否需要来回发送?(听起来像是个坏主意:)
我可能误解了RESTful身份验证/授权的概念。但是,对于每个http请求,“服务”都需要前往数据库以验证凭据,这真的是这种情况吗?有没有一些东西可以缩短这个过程,同时仍然忠于宁静的原则?我可以想到有一个缓存来存储详细信息,并且在服务器重新启动的情况下,它只是使数据库之旅。这只是一个性能优势,可能会使系统复杂化(也许值得,不知道)。这是唯一的解决方案吗?
那么从REST的理论/概念角度来看(不是必需的实现),如何处理这个问题(如果它是一个问题)?在你的专业经验中,你是如何处理这个问题的,这种方法有多Restful?
我们正在开发一个Restlet + J2EE + MySQL Restful Web服务,我弹出了这个问题,但没有令人满意的答案(Google,Stackoverflow等),我知道HTTP的基本和摘要授权,但我不熟悉上述解释的存储/检索的内部结构。