具有多个用户角色的REST,缓存和授权

时间:2010-04-19 23:24:47

标签: rest caching authorization roles

我们有一个多租户系统,具有多种不同的访问级别 - 有时甚至是同一个用户,因为他们在多个角色之间切换。我们开始讨论转移到RESTful实现的事情。我刚刚开始尝试整个REST的事情。

那么如何在访问资源时限制对正确记录的访问,特别是在考虑缓存时?如果用户A访问example.com/employees,他们将收到与用户B不同的响应;用户A在切换到不同角色时甚至可能会收到不同的响应。为了帮助促进缓存,角色的id应该以某种方式合并到uri中吗?也许类似于example.com/employees/123(违反REST规则),或某种类似example.com/employees/role/123的下属资源(这似乎很愚蠢,因为role/###将被附加到全部URI这个地方)。我可以帮忙,但我想我在这里遗漏了一些东西。

编辑提及多租户

1 个答案:

答案 0 :(得分:7)

让用户凭证充当带外资源标识符(即,在不同角色的同一URL上呈现不同的视图)将变得令人讨厌。用户和应用程序在它们之间交换URL,当发生这种情况时,事情就会变坏,而URL只会为不同的凭据返回不同的内容。

我想说每个角色都有不同的世界观,因此每个角色应该访问不同的服务路径:

  • 管理员连接到example.com/admin/employees
  • 用户连接到example.com/users/employees
  • role foo可能连接到example.com/foo/employees

通过这种方式,你可以将'这个角色视为世界本身,并且这个'部分来自'世界的这个视图可以被角色foo'访问。管理员可以连接到example.com/users/employees并验证普通用户如何看待这个世界,而管理员不必首先冒充较低特权别名。

您也可以将DNS部分用于相同目的:admin.example.com/employees与users.example.com/employees。对于相关场景,当“角色”不是安全角色而是多租户命名空间(即每个服务配置帐户获得自己的服务“视图”)时,这特别适用于相关场景。