【问题标题】:CRUD operations validationCRUD 操作验证
【发布时间】:2021-07-18 16:55:31
【问题描述】:

假设我有一个包含 3 个表的数据库:

  1. 客户
  2. 订单
  3. 客户订单

我使用不记名令牌构建了一个具有标准身份验证的 WebAPI,我有一个中间件来接收来自令牌的所有必要声明,并且我有一个控制器用于订单的基本 CRUD 操作。

例如: 删除 - 订单/{id} PUT - 订单/{id}

如何确保用户尝试操作的订单属于当前用户? 每次操作前需要先查询数据库确认OrderId属于当前UserId吗?还是有更简单的方法?

【问题讨论】:

  • 问题是你不能信任客户端。即使 UI 会显示用户的订单,也不会阻止客户端使用任何订单 ID 操作对后端的请求。

标签: asp.net-web-api domain-driven-design crud webapi user-roles


【解决方案1】:

如果用户授予了令牌,则您可以通过某种方式获得信息,客户端应用程序通常根据您的身份管理和令牌提供者的选项来操纵订单。

但要确保此特定订单属于当前用户,只能在您的后端进行检查,这当然需要在每个操作中完成。订单 ID 可能在请求中被暴力破解(猜测)和操纵,因此您需要在每个请求中检查此项。

我建议尽管提取此检查逻辑 - 传递的订单 ID 是否属于令牌中提供的用户 ID - 到某些服务方法,以使其可从不同的地方重用。在您的情况下,例如将其重用于不同的 CRUD 方法,例如 DELETE 和 PUT。

【讨论】:

    猜你喜欢
    • 2018-02-20
    • 1970-01-01
    • 2018-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-11
    相关资源
    最近更新 更多