假设我有一个汽车经销商管理其汽车库存的网站。每个汽车经销商都有自己的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_id
或company_id
的身份验证是否安全?
如果有人能指出我正确的方向,我将不胜感激!
P.S。 我目前在后端使用JSON Web Token身份验证,但它不会阻止不同公司的员工仅使用URL查看每个人的库存。
将NodeJS和Postgres与AWS Cognito一起用于用户身份验证
答案 0 :(得分:0)
如果您计划使用通过API网关公开的AWS Cognito和NodeJS后端,则可以使用IAM策略直接授权端点。设置总结如下。
答案 1 :(得分:0)
JSON网络令牌非常适合您的场景。您可以将公司ID存储在令牌中。然后每个人都可以使用相同的URL。在后端,您验证他们的令牌,如果它通过,则意味着令牌没有被更改。
**令牌经过身份验证的事实意味着companyID是您提供的,因此是合法的。 **
从令牌中获取公司ID,并从URL中获取车辆ID。您应该拥有所有信息来制作一个SQL查询,该查询读取类似SELECT * FROM vehicles WHERE' carID' = x AND' companyID' = y;
如果数据库响应为空,请根据需要进行处理。