【问题标题】:Data level Authorization in RESTREST 中的数据级授权
【发布时间】:2014-01-31 20:53:28
【问题描述】:

我有 Project(id, name, userId) 表和 Activity 表(id​​, title, description, project_id)。 project_id 是指向 Project 表中 id 的外键。项目数据只能由创建它的用户访问。

现在,我公开了 REST Api 来为特定项目创建新活动:

方法:POST

身体 { "title" : "测试活动", "description" : "测试描述", “project_id”:“123”

}

它被 Web 应用程序使用。但是,当然它也可以被外部 REST 客户端使用。

问题: 尚未创建“项目 P”的用户可以通过在上述 Rest 调用中提供“项目 P”的 id 来将活动添加到“项目 P”。我想防止这种情况发生。我当然可以通过从给定的项目 ID 中获取项目数据并检查当前用户是否拥有该项目来编写验证逻辑,但我想要更通用的解决方案。 另外,请注意,这只是插入问题。 有什么想法吗?

【问题讨论】:

    标签: sql rest authorization role-base-authorization


    【解决方案1】:

    尝试编写逻辑来获取用户拥有的项目,然后验证当前用户是否正在访问他们自己的项目。

    【讨论】:

    • "我当然可以通过从给定项目 ID 中获取项目数据并检查当前用户是否拥有该项目来编写验证逻辑,但我想要更通用的解决方案。"
    • 不是来自给定的项目ID,而是来自当前用户。您所说的是您使用给定的项目 ID 来找出项目创建者,然后比较创建者是否是当前用户。这限制了你的验证是基于项目的,但实际上你的验证应该是基于用户的,所以我建议使用当前用户找出当前用户拥有的资源,假设你对你的 REST API 进行了身份验证
    • 知道了。我更新了项目表定义以将“userId”作为外键。因此,从项目 ID 中我可以找到谁是所有者。但无论如何,我不想在我编写的每个 REST 调用中重复这一点。我正在寻找通用的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-23
    相关资源
    最近更新 更多