PhD*_*PhD 15 java performance web-services restful-authentication restlet
对于RESTful Web服务,我们说服务器不应该存储任何状态.现在,对于每个请求,"用户"必须经过身份验证,并且必须拥有他/她希望执行的操作的授权.
现在,每个请求都将包含该用户的授权数据.这是我的困惑:
假设主页上有登录名和密码字段.用户输入用户名/密码,该用户名/密码被发送回服务器,用户验证然后返回"某个令牌".现在,每个请求都会将此令牌发送到服务器.问题(S):
我可能误解了RESTful身份验证/授权的概念.但实际情况是,对于每个http请求,"服务"需要访问数据库以验证凭据吗?有没有什么东西可以简化这个过程,仍然坚持宁静的原则?我可以想到有一个存储细节的缓存,并且在服务器重启的情况下,它只是访问数据库.这只是一个可能使系统复杂化的性能优势(可能值得,不知道).这是唯一的解决方案吗?
因此,从REST的理论/概念角度(不是必要的实现)如何处理这个问题(如果它是一个问题)?您的专业经验如何处理这个问题以及Restful是如何处理的?
我们正在研究Restlet + J2EE + MySQL Restful Web服务,我弹出这个问题,但没有令人满意的答案(谷歌,Stackoverflow等)我知道HTTP的基本和摘要授权,但我不熟悉根据上述说明,存储/检索的内部结构.
REST的精神是无国籍.这并不意味着客户端状态不能由服务持久化,但实际上它确实意味着服务器在内存中保存的客户端状态通常是一件坏事.
您可以做的就是将一个函数保存在用于加密/解密用户信息的内存(即代码)中,而不是将身份验证数据保存在内存中,或者每次都进入数据库进行验证.这是一种技术,也可以通过以下方式建议:
那么,例如,您将要做的是以下内容:
请记住,我描述的这个"功能"并不是一个新奇的东西 - 它是一个标准的安全哈希,但它是基于一个唯一的私钥,只有你的集体服务器知道.您可以根据需要旋转这样的键等.