保护您的Web api操作免受经过身份验证的用户的影

时间:2014-01-16 09:23:01

标签: security asp.net-web-api asp.net-web-api2

我有这种情况:

1个用户 - N个项目

1个项目 - N任务

1个项目 - N评论

当用户通过身份验证时,他可以执行以下操作:

/api/tasks/1

删除他的任务,但当他正在执行/ api / tasks / 2时,他删除了其他人的任务

/api/comments/1 

得到他的评论,但当他正在做/ api / comments / 2时,他读了别人的任务

如何拦截用户操作(操纵URI)并以一般方式检查是否允许用户删除此任务。

任务和评论对userId一无所知,那么如何禁止用户删除其他人的数据呢?

我不是在谈论用户和角色方案。 我在谈论操纵URI来删除属于他人的资源。

更新回答@A Khudairy的问题

1)电子邮件+密码被发送到api。

2)Api使用用户令牌返回用户。

3)然后每次请求都将令牌发送到api,(以便我知道哪个用户正在做什么并在后端处理它。)

2 个答案:

答案 0 :(得分:0)

听起来像你要么必须将UserId添加到Comment和Task实体,以便您可以轻松检查,或者您将需要确保Task或Comment属于用户具有的项目访问呢?

除非我误解你的问题?

如果任务或评论没有UserId,您如何区分自己的评论和任务以及其他人?

答案 1 :(得分:0)

我不会亲自使用URI解决这个问题(我认为没有一种安全的方法可以实现这一点)。我将实施自定义授权过滤器如果您不熟悉,请查看此link以获取有关如何执行此操作的帮助。

在过滤器中,我将使用令牌获取用户ID,并使用路由数据来查看用户尝试执行的过程(以及任务或注释的ID),然后决定用户是否可以继续在那。

过滤器可以在控制器类之上注册,或者仅在某些操作方法上注册,或者从global.asax注册到所有操作(如果需要)。