Web应用程序的REST风格的认证[关闭](RESTful authentication for w

2019-07-30 07:31发布

嗨已经写了这个观察和问题,关于这个问题的较早,但后来才发现,这是一个老“死”的问题。 正如我真的想从别人的一些见解,我重新张贴它作为一个新的问题。

要怎么做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头的内容仅仅是用来解决一个服务器端资源,就像可以用来访问翻译资源,等等的接受语言。 我觉得这是相同的,但也许其他人没有? 你们觉得怎么样?

Answer 1:

一个有趣的问题。 现在我完成了一个REST API的实现 - 已经使用了mod_rewrite和PHP。 它使用HTTP基本身份验证跨HTTPS。 到目前为止,我们正在一个Palm Pre的客户端上。 这家伙开发的客户是在其跟踪用户证书的每个请求提交有点推迟。

暴露SESSION作为资源的想法是一个有趣的一个。 包括它仍违反严格的RESTful原则。 即使你公开会议作为一种资源,你仍然会是使用服务器来跟踪客户端的状态。 严格遵守REST可能会需要使用cookies,因为这是提供给您的客户端持久存储从浏览器。 问题是,让你创建一个JavaScript(或Flash?)客户端管理的HTTP请求的客户端,如果你不希望用户通过HTTP证书的浏览器实现的聚会互动。

一个工具,我发现有用的是REST客户端的Firefox工具......但我仍然进我的凭据到标准的浏览器弹出,即使我使用。

我不得不承认,包括我在执行一些黑客。 如果你正在做的是使用的会议,以供潜在的开发商或东西,我不认为使用基于会话的认证是什么大不了的测试/浏览的API。 较真的人会不同意我敢肯定。 真的,这就是这个归结为...这实质上是一种学术上的争论。 在现实生活中的情况下,你必须做的工作。

...添加到这个对2012年10月23日...

在使自身状态的客户跟踪REST风格的方法坚持不只是学术性的。 它具有可扩展性和暴露的资源的寻址能力具有重要意义。 当我说这个我认为通过客户端状态,我们正在谈论其影响由RESTful接口(一个或多个)发出的响应特定请求的用户属性。 一个REST的优势之一是它的寻址能力。 当你使其以任何方式回应依赖于信息在你开始小打小闹,在该请求没有通过。 只是事后的想法...... 3年后,大声笑。



Answer 2:

我知道这是一个有点老问题,但我想了很多,这里的问题都在不同的领域得到解决。 具体而言,我认为的OAuth 2.0协议已经考虑了很多这些问题; 我不觉得有足够的权威来这里提供他们的答案的总结,但链接的网站上有很多不同的使用情况的叫了明确,这似乎对这个问题是非常有用的,即使全部的OAuth 2.0是不是真的有必要这里。



文章来源: RESTful authentication for web applications [closed]