Forms 为什么基于表单的身份验证不被认为是RESTful的?

Forms 为什么基于表单的身份验证不被认为是RESTful的?,forms,http,rest,restful-authentication,Forms,Http,Rest,Restful Authentication,虽然我“认为”我理解它,但我需要一些澄清。使用纯Restful身份验证,事情确实会变得有点笨拙,使用表单对应用程序的UI有很大帮助(例如,使用单独的登录页面,忘记密码链接,更容易注销?等等) 现在表格出现了,一些人说“不安宁”——什么是“不安宁”?是不是说没有相应的登录资源?还是说这会迫使我失去一些别的东西 注意:如果一个人与他们创建会话,那完全是另一回事。我更想知道“为什么”他们被贴上“宁静”的标签?只需在谷歌上搜索“基于表单的身份验证与restful身份验证”就能获得相当多的点击率 我们可以

虽然我“认为”我理解它,但我需要一些澄清。使用纯Restful身份验证,事情确实会变得有点笨拙,使用表单对应用程序的UI有很大帮助(例如,使用单独的登录页面,忘记密码链接,更容易注销?等等)

现在表格出现了,一些人说“不安宁”——什么是“不安宁”?是不是说没有相应的登录资源?还是说这会迫使我失去一些别的东西

注意:如果一个人与他们创建会话,那完全是另一回事。我更想知道“为什么”他们被贴上“宁静”的标签?只需在谷歌上搜索“基于表单的身份验证与restful身份验证”就能获得相当多的点击率


我们可以使用这些“表单”来验证并传递令牌,以便应用程序存储在cookies等中,我觉得这完全是restful的(假设加密安全等)…

很好的问题。我认为RESTful纯粹主义者可能会说,与操作关联的URI,而不是与资源关联的URI,是基于表单的auth不是RESTful的原因,这是您自己指出的

老实说,对于web应用程序,我认为100%纯RESTful应用程序的想法有点像乌托邦式的理想。但是,我相信对于RESTful web服务来说,这是可以实现的,因为调用应用程序可以通过请求头传递凭据

归根结底,我认为只要你的应用程序运行正常,就可以了,你不必担心它是否是纯粹的RESTful

这是我的0.02美元。

来自:

为了实现RESTful,每个HTTP请求本身都应该携带足够的信息,以便接收方能够处理它,从而与HTTP的无状态特性完全协调


并不是说基于表单的身份验证不是RESTful-拥有一个会话根本不是RESTful。RESTful方法是在每个请求中发送凭据。然而,这很容易被窃听,但HTTPS/SSL/TLS填补了这一漏洞。

可能通过表单发送您的凭据进行身份验证没有什么错。问题是大多数基于表单的系统都依赖于会话,因此只需要“一次”登录

会话是服务器状态,因此违反了REST体系结构的无状态约束

如果每次都必须发送凭据,则可以将它们包括在有效负载中(即使用表单),也可以使用HTTP授权标头

如果将它们包含在有效负载中,则可以将它们包含在正文中,但只能用于POST或PUT,而不能用于GET或DELETE(因为它们没有正文)

如果将它们作为查询参数的一部分包含在URL中,则URL不再一定表示实际的资源。另一个原则是URL与资源匹配。在查询参数中添加带外信息(如凭据)会使约束变得有点混乱


因此,对于HTTP上的REST系统,最好使用现有的HTTP授权机制,而不是解决其他问题。您还可以使用特定于客户端的SSL证书,这种证书也可以正常工作。

基于表单的身份验证不使用内置于HTTP中的身份验证技术(例如基本身份验证、摘要身份验证)

REST纯粹主义者会要求您尽可能使用内置在HTTP中的功能。尽管基于表单的身份验证非常常见,但它不是官方协议的一部分。因此REST纯粹主义者将基于表单的身份验证视为“在HTTP上构建功能,而该功能已经存在于HTTP本身中”的一个实例

现在表格出现了,一些人说“不安宁”——什么是“不安宁”

身份验证凭据不在标准位置

休息并不能消除对线索的需要。REST所做的是将对先验知识的需求集中到易于标准化的形式中

RFC 7235描述了报头;这为我们提供了一种标准的方法来区分授权请求(有头)和匿名请求(没有头)

因为我们可以区分授权请求和匿名请求,所以通用组件可以做一些有趣的事情

例如,如果源服务器限制对资源的访问,我们可能不希望共享缓存重新使用HTTP响应的副本来满足其他请求。因为授权有一个标准化的形式,我们可以定义它来限制共享缓存可以做什么

将相同的信息放入cookie头中,实际上会对通用组件隐藏授权语义

(这有点类似于对请求使用POST请求——通用组件无法区分语义安全的POST请求和语义不安全的POST请求,因此无法智能地利用安全处理做任何事情)


如果我们有更智能的表单处理——将信息复制到授权头而不是查询字符串/请求体的表单输入控件——那么表单就可以了。但是(a)我们没有,并且(b)我们不太可能得到它,因为向后兼容性。

22k Gold比24k强,即使后者是最纯的:)当你说“现有HTTP授权机制”时,你是说basic/digest吗?但是他们不是从创建漂亮的登录屏幕中带走了“乐趣”吗是的,相反,你会从尝试使用Basic和Digest注销网页中得到乐趣!对每个人来说都很有趣。一点也不有趣,你只是开始抓挠人体解剖学的各个部分,只是在思考如何解决;)那么基于无会话cookie的方法呢?那当然可以考虑