嗨已经写了这个观察和问题,关于这个问题的较早,但后来才发现,这是一个老“死”的问题。 正如我真的想从别人的一些见解,我重新张贴它作为一个新的问题。
要怎么做REST风格的认证问题,人们普遍enthousiastically喊“HTTP认证”。 然而,我怀疑SORF的那些人是否曾经试图使与REST基于浏览器的应用程序 (而不是一台机器到机器网络服务)。 (无犯罪意图 - 我只是不认为他们曾经面临的并发症)
我发现:在产生的HTML页面在浏览器中查看RESTful服务使用HTTP验证问题是:
- 用户通常得到一个丑陋浏览器制造的登录框,这是veyr用户不友好的。 您不能添加密码检索,帮助框,等等。
- 注销或以不同的名称登录一个问题 - 浏览器会不停地发送验证信息到现场,直到关闭窗口
- 超时是困难
铲球这些逐点非常有见地的文章是在这里 ,但是这导致了很多特定浏览器的JavaScript两轮牛车,变通办法变通办法,等等的。 因此,它也不能向前兼容的,因此将需要不断维护,新的浏览器被释放。 我不认为干净,清晰的设计,再加上我觉得这是一个很多额外的工作和头痛只是这样我就可以enthousiastically展示我的REST的徽章给我的朋友。
我相信,饼干是解决方案。 别急,饼干都是邪恶的,不是吗? 没有他们没有,饼干的方法经常被用来是邪恶的。 一个cookie本身只是一块的客户端信息,就像HTTP认证信息,浏览器会跟踪,当你浏览的。 而这一块的客户端信息在每个请求发送到服务器,再次就像HTTP认证信息会。 在概念上,唯一不同的是,这片客户端状态的内容可以由服务器作为其响应的一部分来确定。
通过使会议只用下面的规则一个RESTful资源:
- 会话映射一个关键用户ID(也可能是最后行动时间戳超时)
- 如果会话存在,那么这意味着,关键是有效的。
- 登录手段张贴到/会话,一个新的密钥被设置为一个cookie
- 注销delete一个指/会话/ {}键(与重载的POST,请记住,我们是一个浏览器和HTML 5是一个漫长的路要走)
- 认证是通过在每个请求发送密钥作为cookie和检查会话是否存在,是否有效进行
到HTTP认证,唯一的区别,现在,是该认证密钥由服务器生成和发送到谁一直发送回客户端,而不是客户端从输入的证书计算它。
我觉得这是一个足够的解决方案,工作正常,但我必须承认,我没有足够的安全专家,以确定该方案的潜在漏洞 - 我所知道的是,数以百计的非RESTful Web应用程序本质上使用相同登录协议($ _SESSION inphp,HttpSession的J2EE中,等等)。 该Cookie头的内容仅仅是用来解决一个服务器端资源,就像可以用来访问翻译资源,等等的接受语言。 我觉得这是相同的,但也许其他人没有? 你们觉得怎么样?