2

我正在创建一个带有 JavaScript 客户端的系统,它将通过 REST (HTTP)[JSON] 与服务器通信。

我正在使用基于角色的访问控制来管理呼叫。

示例:[显式 URL 将保持不变]

  • 匿名 -> 请求\
  • 服务器 -> 登录表单的路由:\login\
  • 用户(现在有 cookie!)-> 请求\
    • if (user->role == "manager") return "\manager-homepage\";
    • else return "\homepage\";

由于 REST 是无状态的,我将如何管理这个用例?

我是否在每个请求中都发送 cookie,返回的 HTTP 状态码会告诉 JS 路由到哪里?

[这将是相当低效的 + 对 MITM 攻击开放]

4

1 回答 1

1

您不能使用标准的身份验证方案,例如http digest吗?

示例:[来自维基百科页面]

  • 客户端请求一个需要身份验证但不提供用户名和密码的页面。通常这是因为用户只需输入地址或点击页面链接。
  • 服务器以 401“客户端错误”响应代码进行响应,提供身份验证领域和一个随机生成的、一次性的值,称为 nonce。
  • 此时,浏览器将向用户显示身份验证领域(通常是对正在访问的计算机或系统的描述)并提示输入用户名和密码。用户此时可以决定取消。
  • 提供用户名和密码后,客户端会重新发送相同的请求,但会添加包含响应代码的身份验证标头。
  • 在此示例中,服务器接受身份验证并返回页面。如果用户名无效和/或密码不正确,服务器可能会返回“401”响应码,客户端会再次提示用户。

注意:客户端可能已经拥有所需的用户名和密码,而无需提示用户,例如,如果它们先前已由 Web 浏览器存储。

另请参阅对一个非常相似的问题的答案:REST 和身份验证变体

根据您所需的安全级别,您可以通过 ssl 提供整个服务。这将防止中间人攻击。

于 2012-06-23T08:33:34.977 回答