在无状态环境中防止休息呼叫

时间:2013-12-19 12:48:57

标签: web-services security rest web stateless

假设一个带有分页表的应用程序。

该表显示了索引项(item1,item2,... itemN)。

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

项目的详细信息由/ items / 1或/ items / N

等GET调用提供

问题是:哪种方法可以保护访问不允许的项目。

例如。

  

a)用户调用/ items会导致{1,2,3,4,5}打印出来   包含每个详细项目链接的表格   b)阻止对/ item / 6的调用

只有无国籍的解决方案,谢谢!

1 个答案:

答案 0 :(得分:0)

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

如果您想要的是用户只能访问之前列出的项目,那么您就不会处于无状态环境中。调用该项目的结果取决于之前的调用。所以你有一个州。您可以移动状态,将其移动到客户端,但它仍然是状态。

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

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

[
  { id = 1, token = 'XXX'},
  { id = 2, token = 'YYY'}
]

令牌将由以下内容组成:

  • 一个随机
  • 到期日
  • 要授权的商品ID
  • 上述元素的加密签名

您使用服务器私钥对授权令牌进行签名,因此没有人可以伪造它。您要求客户端将此令牌添加到任何请求(作为HTTP标头)。因此,服务器可以验证客户端是否已获得授权。

您可以将用户名添加到令牌中,以确保其他人无法重复使用授权。

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