如何检查用户是否具有数据库查询权限?

时间:2017-08-25 05:11:07

标签: node.js database security authentication web

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

当工作人员在页面http://sellcarsfaster.com/inventory/car/jdksf9843时 他们应该看到他们公司的车牌jdksf9843。如果他们复制此网址并将其发送给同事,其他工作人员应该能够查看该车。但是,如果将URL发送给非工作人员,则该用户无法查看该车。只有该汽车经销商的工作人员才能进入汽车。

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

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

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

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

P.S。 我目前在后端使用JSON Web Token身份验证,但它不会阻止不同公司的员工仅使用URL查看每个人的库存。

将NodeJS和Postgres与AWS Cognito一起用于用户身份验证

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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

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

如果数据库响应为空,请根据需要进行处理。