Web services 在无状态上下文中防止rest调用

Web services 在无状态上下文中防止rest调用,web-services,security,rest,web,stateless,Web Services,Security,Rest,Web,Stateless,让我们假设一个应用程序有一个分页的表 该表显示了索引项(item1、item2、…itemN) 分页结果由REST GET调用提供,如/items 项目的详细信息由GET调用提供,如/items/1或/items/N 问题是:哪种方法是确保访问不允许的项目的安全的最佳方法 比如说 a) 用户对/items的调用导致{1,2,3,4,5},它打印一个 带有每个详细项目链接的表。 b) 阻止调用/item/6 仅限无状态解决方案,谢谢 我不确定我是否完全理解你的问题。在我看来,您希望获得项目级授权。

让我们假设一个应用程序有一个分页的表

该表显示了索引项(item1、item2、…itemN)

分页结果由REST GET调用提供,如/items

项目的详细信息由GET调用提供,如/items/1或/items/N

问题是:哪种方法是确保访问不允许的项目的安全的最佳方法

比如说

a) 用户对/items的调用导致{1,2,3,4,5},它打印一个 带有每个详细项目链接的表。
b) 阻止调用/item/6


仅限无状态解决方案,谢谢

我不确定我是否完全理解你的问题。在我看来,您希望获得项目级授权。例如,用户A应该只看到项目1、3和5,而用户B应该看到项目1、2、3和6。如果是这种情况,您应该对列表和单个项目强制执行授权约束

如果您希望用户只能访问他以前列出的项目,那么您就不在无状态上下文中。项目调用的结果取决于上一次调用。所以你有一个状态。您可以移动状态,将其移动到客户端,但它仍然是状态

如果您想要的是第二个选项,并且您希望您的服务大部分保持无状态,那么请查看基于功能的安全性。基本上,您的列表需要返回一个加密令牌,客户端需要使用该令牌才能访问各个项目

基本上,不只是返回条目ID,而是添加一个加密令牌:

[
  { id = 1, token = 'XXX'},
  { id = 2, token = 'YYY'}
]
令牌将由以下部分组成:

  • 暂时的
  • 有效期
  • 要授权的项目ID
  • 上述元素的加密签名
您使用服务器私钥对授权令牌进行签名,因此没有人可以伪造它。您要求客户端将此令牌添加到任何请求中(作为HTTP头)。因此,服务器可以验证客户端是否已收到授权

您可以将用户名添加到令牌中,以确保授权不能被其他人重用


注意,我只是从内存中描述了这个实现。和往常一样,请仔细检查我告诉你的任何事情;-)

你说得对,有一种状态。我只是不想把它放在服务器上。所以我喜欢来回传递列表的想法。你有没有什么资料可以告诉我,让我看一下,这样才能确保名单的安全?我正在搜索基于功能的安全性,但它将我引向操作系统安全性。