使用REST(HTTP)进行基于角色的访问控制?

时间:2012-06-23 08:24:02

标签: json http authentication rest rbac

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

我正在使用role-based access control来管理来电。

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

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

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

我是否随每个请求发送cookie,并且返回的HTTP状态代码将告诉JS在哪里路由?

[哪种效率相当低+对MITM攻击开放]

1 个答案:

答案 0 :(得分:1)

您是否可以使用标准身份验证方案,例如http digest

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

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

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

另请参阅这个非常相似的问题的答案:REST and authentication variants

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