使用多个用户角色进行 REST、缓存和授权

标签 rest caching authorization roles

我们有一个 Multi-Tenancy 系统,具有多个不同级别的访问权限——有时甚至是同一用户在多个角色之间切换时也是如此。我们开始讨论转向 RESTful 实现。我刚刚开始对整个 REST 事情感到困惑。

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

编辑提及 Multi-Tenancy

最佳答案

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

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

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

  • 通过这种方式,您可以将“此角色看待世界如此这般”部分与“角色 foo 可以访问此世界观”部分分开。管理员可以连接到 example.com/users/employees 并验证普通用户如何看待这个世界,而管理员不必首先冒充较低特权的别名。

    您也可以将 DNS 部分用于相同目的:admin.example.com/employees 与 users.example.com/employees。这对于相关场景特别可行,当“角色”不是安全角色而是 Multi-Tenancy 命名空间时(即,每个服务供应帐户都有自己的服务“ View ”)。

    关于使用多个用户角色进行 REST、缓存和授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2671582/

    相关文章:

    ubuntu - 在 Vagrant VM 中意外修改 authorised_keys 后无法登录

    asp.net - 为什么在页面级别撤销授权后 CheckUrlAccessForPrincipal 仍然返回 true?

    javascript - 在 html header 中设置 no-cache 不起作用

    css - 如何在LESS中生成一次随机数并多次使用

    authorization - 基于声明的授权是否适用于单个资源

    rest - 如何抑制来自 CLI CURL 的请求输出的 header

    c++ - C++ REST SDK 中的 URI 编码 ("Casablanca")

    rest - 从 REST 执行 QTP 测试集

    java - Spring Boot HTTP GET 自定义验证

    asp.net - 如何按年龄设置 *.js 和 *.css 缓存过期时间? web.config 中的 <clientCache> 设置不起作用