【问题标题】:RESTful Service AuthenticationRESTful 服务认证
【发布时间】:2013-06-19 11:20:04
【问题描述】:

根据 REST 规范,服务应该是无状态的;但随后就很难启用身份验证。我读过的一些东西说“使 REST 有状态并不是世界末日”。但这不是重点,重点是遵循规范并保持一致。

所以,我在这里问这个问题,希望有人能引导我朝着正确的方向前进。我正在使用 Spring MVC 创建 REST 服务。我没有意见。它是一个真正的 REST 服务,它使用/生成 JSON。我需要为这个无状态且遵循 REST 规范的应用程序提供身份验证(和授权)机制。客户端将使用 JavaScript(Backbone.js、CoffeeScript)编写,并接受来自用户的用户名/密码。然后它将该信息发布到服务器。

如何在基于 Spring 的应用程序中实现真正的无状态身份验证(和授权)?

通过 SSL 进行摘要式身份验证 - 这是要走的路吗?

【问题讨论】:

  • 您所说的“REST 规范”是什么?它是一种设计模式和一套指导方针,而不是规范。

标签: authentication rest spring-mvc authorization restful-authentication


【解决方案1】:

会话管理不同于状态管理。

在握手期间您的服务器端可以生成一个令牌,并且每次客户端进行调用时,它都必须将该令牌添加到头部或者您的服务器能够分析并决定您是否可以允许调用的其他位置继续。

服务器不需要维护任何状态来检查令牌的有效性,这可以使用某种算法来完成。

【讨论】:

  • 你如何在服务器端实现这一点?
  • 但是如果算法以某种方式被破解,可以发送任何令牌来访问资源
  • 您还应该加密该令牌,它可以简单地被散列或加盐散列;)(基本上是散列的散列)。这就是他们零日保护开始的地方,但如果您使用的是标准加密算法并且有人破解它,那么行业的主要问题不仅仅是您自己的应用程序。使用 SSL 将确保数据包不被篡改,但没有必要使用 SSL。我们已经看到 FBI、Jboss 和 Sony 等受到威胁,所以是的,这并非不可能,但使用标准的良好做法将确保普通 joe 无法入侵它。跨度>
【解决方案2】:

您是否研究过 Spring Security 的工作原理?使用 Spring Security,我已经能够在 REST 请求中添加来自客户端的自定义 HTTP 授权标头。这是服务器端提取的,请求用户经过身份验证,可以授权访问特定资源。

【讨论】:

    【解决方案3】:

    您可以通过 SSL 使用 Basic 或 Digest 身份验证,这两种身份验证都不意味着任何重要的状态。服务器还可能发回一个 cookie,您的客户端在执行进一步请求时需要将其发回(我相信 Javascript 代码会为您处理所有这些)。还有其他可能的身份验证机制,但它们更复杂且不一定适合。 (另一个关键的无状态密钥是客户端验证的 SSL,但这需要浏览器安装客户端 SSL 密钥对,并且服务器要知道该身份的含义,并且部署起来相当复杂。)

    在服务器端,使用 Spring Security 可以很容易地处理所有这些事情。它适用于 Spring MVC。

    【讨论】:

      猜你喜欢
      • 2012-05-10
      • 2011-04-05
      • 2011-01-02
      • 2012-11-06
      • 2015-09-06
      • 2013-07-05
      • 1970-01-01
      • 2019-05-20
      • 1970-01-01
      相关资源
      最近更新 更多