加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ajax – 坚持我的REST枪或打破无国籍?建议需要

发布时间:2020-12-16 02:52:09 所属栏目:百科 来源:网络整理
导读:我编写了一个RESTful servlet,UI开发人员想要在服务器上保存登录状态. 他提出了这个奇怪的说法:“我没有遇到过纯REST的生产REST实现.我见过的所有实现都让服务器维持会话.” 我发现这很难接受.首先是技术性,那里有很多普通的HTTP页面,都是纯粹的RESTful.其
我编写了一个RESTful servlet,UI开发人员想要在服务器上保存登录状态.

他提出了这个奇怪的说法:“我没有遇到过纯REST的生产REST实现.我见过的所有实现都让服务器维持会话.”

我发现这很难接受.首先是技术性,那里有很多普通的HTTP页面,都是纯粹的RESTful.其次,是的,有非RESTful实现标记为RESTful,就像黄铜标记为“黄金”一样.第三,仅仅因为其他人从桥上跳下来并不意味着我应该.

背景:这是一个使用HTTPS和基本身份验证的JavaScript Ajax Web应用程序.为避免通常(不可自定义的)浏览器登录弹出框,应用程序会显示一个登录屏幕,其中包含产品徽标和名称和密码的文本框.名称和密码存储在文档中,并在每个请求的Authorization标头中发送.如果刷新页面,则名称和密码将丢失,用户必须再次输入.这被认为是一个错误; UI开发人员希望能够再次按下刷新按钮而不再提供密码.

因此开发人员想要使用cookie或JSP会话. Abby,最终每个REST实现都在服务器上维护应用程序状态吗?或者有没有办法解决这个问题,仍然保持我的RESTful纯度?

解决方法

我认为出于实际原因(主要是可浏览的能力),您需要区分应用程序状态和身份验证状态.我想不出任何在服务器端没有保留某种形式状态的认证机制.

真正重要的是它与应用程序的脱钩程度.例如,HTTP Digest在服务器上保留某种形式的状态,但这显然是作为正常的WWW-Authenticate和Authorization报头协商的一部分抽象出来的.因为大多数浏览器本身都支持它,所以这与应用程序正交,因此不会破坏REST的无状态原则.

如今,由于用户对浏览器中不满足HTTP Basic / Digest身份验证的美学期望,网站倾向于使用基于表单的身份验证和随后的cookie.公平地说,它不仅仅是它的外观,它还是一个可用性问题(例如“忘记了你的密码”信息,尽管这可能是401响应的主体)和安全性.浏览器不允许您轻松地从基本/摘要/证书身份验证注销,除非它在一个页面内完全在Ajax中完成,正如您所提到的那样,这可以帮助CSRF.

我认为cookie可用于身份验证,但请确保您不在会话中存储与应用程序相关的变量.

你可以阅读一些Roy Fielding’s comments on the topic:

Authentication is orthogonal. Cookies
are also orthogonal when they are
simply used for content negotiation or
authentication. However,Cookie
authentication is not allowed in REST
because it lacks visibility,which
causes security problems because the
other components don’t know it is
sensitive information.

编辑(关于安全方面的进一步评论):

我发现Roy Fielding在我引用的消息中的评论是出于安全原因而反对cookie.他是对的.但是,在我看来,通过基本/摘要/证书(在2003年,该消息的日期并不是真的在雷达上),而不是针对cookie盗窃来保护CSRF更加困难.这取决于当然的实施.没有完美的解决方案,但如果您使用cookie,请通过HTTPS使用安全cookie.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读