【发布时间】:2011-12-22 17:50:33
【问题描述】:
多年来,我一直在绞尽脑汁并在谷歌上搜索,但没有找到令人满意的处理方法。我想编写一个很好的完全 RESTful 服务来返回资源,但是您有权读取(或写入)的数据因您的角色而异。因此,例如,用户可能可以在他们的个人资料中看到他们的私人电话号码,站点管理员也可以看到,但其他用户不会。匿名访问者可能无法看到其他用户的真实姓名,但其他用户(和站点管理员)可以看到。关于可以读取或写入哪些属性,大约有 4 或 5 个访问级别和规则。我对写作感到满意,因为客户端可以 PUT 更改并且服务器不一定要全部(或根本)接受它们,但阅读是我的问题。
<user>
<id>jimbob</id>
<real-name>Jim Roberts</real-name> <!-- only logged-in users should see this -->
<phone-number>+1 42424151</phone-number> <!-- only the user and admin users should see this -->
</user>
我想要一个包含所有公共数据的可正确缓存的用户配置文件资源,但是如何对只有特定用户才能看到的所有内容进行建模?我最多可以提供 4 个指向额外信息的链接,其中大多数会为大多数用户返回未经授权的错误,每个链接都包含与角色相关的额外信息。但这似乎非常低效,并且还将客户与角色概念联系在一起,而以前他们只需要了解用户。有更好的想法吗?
<user>
<id>...</id>
<link rel="more" href="extra-user-profile-data-for-logged-in-users"/>
<link rel="more" href="extra-user-profile-data-for-senior-users"/>
<link rel="more" href="extra-user-profile-data-for-admin-users"/>
<link rel="more" href="extra-user-profile-data-for-superadmin-users"/>
</user>
请注意 - 我没有为任何问题苦苦挣扎
- 身份验证
- 资源级访问控制
- 在服务器端实现访问控制或授权
我在挣扎
- 如何以真正的 RESTful 方式表示“普通”HTML 网站中的资源在不同的人看来会有所不同。
这似乎是每个人都应该遇到的一个非常普遍的问题,但我找不到任何东西!请帮忙!
【问题讨论】:
-
我认为省略与用户无权查看的属性相对应的 XML 元素是合适的。我认为这与有多少基于角色的网络应用程序以 HTML 表单呈现数据是一致的。
-
它使其无法缓存,因为否则公共数据将与相同(缓存)表示中的某些(未知)受限数据子集混合。
-
对我来说听起来像是一个简单的问题。 1. 用户认证。 2. 用户请求一个 URI 3. 你实现的访问控制机制启动,并捕获 URI 请求。 4. 资源监视器创建要返回给请求用户的数据模板。此模板充当某种票证。 5. 服务根据它从资源监视器接收到的模板来满足 URI 指定的用户请求。 6. 服务将结果返回给用户。嗯
标签: security rest authorization access-control