【发布时间】:2012-03-28 13:11:54
【问题描述】:
我正在尝试构建一系列 REST 样式的服务,供各种内部系统使用。这些服务维护一个内部访问控制系统,该系统确定用户是否有权对特定资源执行操作。
前端系统期望有一种方法来测试用户对指定资源的访问权限,以便他们可以删除其 UI 上依赖于这些操作的功能,这样他们就不会最终向服务发出请求会阻塞。
我如何将这些访问控制信息传达给我的客户?是否有任何约定可以表达您可以对任何指定资源执行的操作?
目标是向客户传递足够的信息,以便他们知道他们可以对资源提出哪些类型的请求,而无需期待 403 响应。
编辑:
我正在考虑向我的资源中的链接添加“支持的操作”:
<contact>
<addresses href="/contact/12345/addresses" actions="GET" />
</contact>
如果调用者无权访问资源,则链接不会出现在文档中。
它确实迫使我明确说明每个资源上可用的操作,并且客户端必须阅读我提供的每个链接上的这些信息,并且它并不容易处理 PUT 请求(因为您将指定您希望处理的 URL)。
这看起来合理吗?有没有更好的约定来实现这一点?
编辑:
为了任何未来读者的参考,我决定将可用操作放在指向现有资源的链接上,因此调用者不需要发出单独的 OPTION 请求。
对于通过 PUT 请求创建新资源,这有点棘手,因为资源尚不存在通过 URL 描述。在这些情况下,我决定使用描述“添加”机制的“子”链接:
<contact>
<addresses href="/contact/12345/addresses" actions="GET">
<add href="/contact/12345/addresses/[name]" actions="PUT"/>
</addresses>
</contact>
这有点接近于描述 RPC 样式的接口,但它确实描述了操作(添加新资源作为地址的子项)以及它在文档中的缺失(在第一个示例)将用于指示您无权访问该资源。
除此之外,我将尝试支持 OPTIONS,以便客户可以根据需要逐个检查资源。
【问题讨论】:
标签: rest access-control