Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js MERN堆栈身份验证和授权_Node.js_React Redux_Authorization_Access Control_Mern_Abac_Alfa - Fatal编程技术网

Node.js MERN堆栈身份验证和授权

Node.js MERN堆栈身份验证和授权,node.js,react-redux,authorization,access-control,mern,abac,alfa,Node.js,React Redux,Authorization,Access Control,Mern,Abac,Alfa,我正在创建一个MERN(Mongo、Express、React-redux、Node)堆栈应用程序,在其中添加身份验证、授权和访问控制功能。我知道如何实现身份验证服务,但不知道如何实现授权和访问控制。例如:当用户登录时,他将能够在仪表板上创建、编辑和删除todo,而没有人能够看到或编辑该todo。我如何实现这一点?任何链接,代码或帮助将不胜感激。非常感谢 这是一个很好的问题。答案很长:-)我刚刚回答了一个类似的问题 TL;博士 您需要的是所谓的外部化/动态授权管理。形式化模型称为基于属性的访问控

我正在创建一个MERN(Mongo、Express、React-redux、Node)堆栈应用程序,在其中添加身份验证、授权和访问控制功能。我知道如何实现身份验证服务,但不知道如何实现授权和访问控制。例如:当用户登录时,他将能够在仪表板上创建、编辑和删除todo,而没有人能够看到或编辑该todo。我如何实现这一点?任何链接,代码或帮助将不胜感激。非常感谢

这是一个很好的问题。答案很长:-)我刚刚回答了一个类似的问题

TL;博士 您需要的是所谓的外部化/动态授权管理。形式化模型称为基于属性的访问控制(/)。它由NIST正式确定

更深入 你说:

当用户登录时,他将能够在仪表板上创建、编辑和删除todo,而没有人能够看到或编辑该todo

您需要使用属性编写一个策略,该属性将允许用户执行此类操作,并阻止他们执行其他操作。如果我们重写您的需求,它将变成:

  • 用户可以在自己的仪表板上创建、编辑和删除待办事项
  • 没有人可以在他们不拥有的仪表板上看到项目
查看需求,您意识到您有:

  • 主题(或用户)及其属性(如角色、部门…)
  • 操作(例如查看、编辑、删除…)
  • 对象或资源(“TODO”项)及其容器(仪表板)
这意味着您可以开始根据属性重写您的需求。这就变成了:

  • 如果user.username==object.dashboard.owner,则用户可以对类型为==“TODO”的对象执行操作==“查看”
然后,您可以添加:

  • 如果object.dashboard.owner!=user.username
编写此类策略的语言称为ALFA(/),是授权的缩写语言。它是由定义的标准

一旦定义了策略,就需要部署、运行和实施它们。这就是ABAC体系结构的作用所在:

  • 策略管理点(PAP):编写策略的位置
  • 策略决策点(PDP):运行/执行策略的位置
  • 策略执行点(PEP):执行策略的地方-这可能是一个API网关、一个拦截器
  • 策略信息点(PIP):可以检索其他元数据和属性的位置

接下来的问题是:您想在哪里实施?您的MERN体系结构是什么样子的?您想授权:

  • 在web UI中?(功能验证)
  • 在API层中(事务性authZ)
  • 在数据层中(以数据为中心的authZ/过滤)
例如,您是否希望筛选MongoDB中的数据并仅显示允许的结果?是否希望在API层上应用授权?API网关(例如Kong)可以通过授权插件(例如)帮助您实现这一点

有开源和商业ABAC实现,还有一个标准机构(我是一些规范的编辑,比如JSON/REST请求/响应)

  • -开源
  • AuthZForce-一个开源的PDP
  • -商业ABAC平台