【问题标题】:How to check is a user has permission to database query?如何检查用户是否具有数据库查询权限?
【发布时间】:2017-08-25 05:11:06
【问题描述】:

假设我有一个网站,汽车经销商可以在其中管理他们的汽车库存。每个汽车经销商都有自己的company_id,他们的员工使用staff_id 的员工账户。

当工作人员在页面http://sellcarsfaster.com/inventory/car/jdksf9843时 他们应该看到 ID 为 jdksf9843 的公司汽车。如果他们复制此 url 并将其发送给同事,其他工作人员应该能够查看汽车。但是,如果将 url 发送给编外人员,则该用户无法查看汽车。该车应仅供该汽车经销商的工作人员使用。

更进一步,我如何检查具有各种关系的各种资产的各种可能的数据库查询的权限?如下:

http://sellcarsfaster.com/inventory/car/jdksf9843/tires/93sl9843 http://sellcarsfaster.com/insurance/2djlasd8 http://sellcarsfaster.com/history/event/8o4jsdfj

在这样的应用中检查查看权限是否有最佳做法?后端应该做什么?我是否必须进行计算量大的数据库查询才能进行身份验证?我是否必须为每个数据库查询编写自定义身份验证函数?基于staff_idcompany_id 进行身份验证是否安全?

如果有人能指出我正确的方向,将不胜感激!

附: 我目前在我的后端有 JSON Web Token 身份验证,但它不会阻止不同公司的工作人员仅通过 url 看到彼此的库存。

使用 NodeJS 和 Postgres 与 AWS Cognito 进行用户身份验证

【问题讨论】:

    标签: node.js database security authentication web


    【解决方案1】:

    如果您计划使用通过 API Gateway 公开的 AWS Cognito 和 NodeJS 后端,那么您可以使用 IAM 策略直接授权端点。设置总结如下。

    • 设置 Cognito 用户池并将其与您的 NodeJS 应用程序集成
    • 将 AWS API Gateway 设置为 NodeJS 服务器的代理并配置到它的每个路由路径。
    • 将 API 网关配置为使用 IAM 授权方。
    • 使用 Cognito 用户组功能,您可以附加 IAM 角色(内部策略),其中每个用户组都可以访问由 IAM 策略授予的相应端点。
    • 为了保护您的 NodeJS 服务器免受直接访问(仅允许通过 API 网关访问),您可以使用 API 网关客户端证书或使用不同的身份验证机制。

    【讨论】:

      【解决方案2】:

      JSON Web 令牌非常适合您的场景。您可以将公司 ID 存储在令牌中。然后每个人都可以使用相同的 URL。在后端,您验证他们的令牌,如果它通过,则意味着令牌没有被更改。

      **令牌经过身份验证这一事实意味着公司 ID 是您提供的,因此是合法的。 **

      从令牌中获取公司 ID,从 URL 中获取汽车 ID。您应该拥有所有信息来制作一个 SQL 查询,该查询读取类似 SELECT * FROM vehicle WHERE 'carID'=x AND 'companyID'=y;

      如果数据库响应为空,则按您认为合适的方式处理。

      【讨论】:

      • 问题是所有这些不同的查询都无法访问他们表中的company_id。例如。 tire 不会有company_id,但car 会有company_id
      猜你喜欢
      • 2012-07-07
      • 2013-12-09
      • 2016-04-23
      • 1970-01-01
      • 1970-01-01
      • 2011-01-28
      • 1970-01-01
      • 1970-01-01
      • 2011-02-26
      相关资源
      最近更新 更多