【问题标题】:Secure your web api actions from authenticated users保护您的 Web API 操作免受经过身份验证的用户的影响
【发布时间】:2014-01-16 20:12:34
【问题描述】:

我有这种情况:

1 个用户 - N 个项目

1 个项目 - N 个任务

1 个项目 - N 条评论

当用户通过身份验证后,他可以:

/api/tasks/1

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

/api/comments/1 

为了得到他的评论,但是当他在做 /api/cmets/2 时,他阅读了其他人的任务

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

Task 和 Comment 不知道任何关于 userId 的信息,如何禁止用户删除其他人的数据?

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

更新以回答@A Khudairy 的问题

1) 邮箱+密码发送到api。

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

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

【问题讨论】:

  • 你是如何在你的应用中实现授权的

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


【解决方案1】:

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

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

过滤器可以注册在控制器类的顶部,或者只是在一些操作方法上,或者如果需要的话,从 global.asax 到所有操作。

【讨论】:

  • 在自定义 AuthorizationFilter 中是否可以访问 api 控制器的 ctor 中的注入服务?
  • 我刚刚认为使用过滤器完成该任务是否真的很有意义。我不能使用一个过滤器来统治它们……我必须创建多个过滤器。我只是认为我可以将其作为我的业务服务的一部分,并在 api 控制器中捕获一个 customException,然后返回 403,你怎么看?
  • 这也是有道理的。无论对您有什么好处...我们曾经遇到过类似的问题,并且我们使用了过滤器..但我想两者都还可以..过滤器的优势在于您将返回正确的消息“未授权”
  • 看这里stackoverflow.com/questions/21173880/…你可以把它标记为解决方案:P
【解决方案2】:

在我看来,您要么必须将 UserId 添加到 Comment 和 Task 实体,以便轻松检查,要么需要确保 Task 或 Comment 属于用户拥有的项目也可以访问?

除非我误解了你的问题?

如果Task或Comment没有UserId,你将如何区分自己的cmets和tasks和别人的?

【讨论】:

    猜你喜欢
    • 2020-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-28
    • 1970-01-01
    • 1970-01-01
    • 2013-01-27
    • 2014-11-20
    相关资源
    最近更新 更多