【问题标题】:MERN stack authentication and authorizationMERN堆栈认证和授权
【发布时间】:2019-07-03 00:55:50
【问题描述】:

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

【问题讨论】:

    标签: node.js react-redux authorization access-control mern


    【解决方案1】:

    这是一个很好的问题。答案很长 :-) 我刚刚回复了一个类似的问题here so you could start reading that

    TL;DR

    您正在寻找的是所谓的外部化/动态授权管理。正式模型称为基于属性的访问控制 ( / Wikipedia)。它由Nat'l Institute of Standards & Technology (NIST) 正式化。

    更深入

    你说:

    当用户登录后,他将能够在他的仪表板上创建、编辑和删除待办事项,并且没有人能够看到或编辑它。

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

    • 用户可以在他们拥有的仪表板上创建、编辑和删除 TODO 项。
    • 任何人都无法在仪表板上查看不属于他们的项目。

    查看要求,您意识到您有:

    • 主题(或用户)及其属性(例如角色、部门...)
    • 一个动作(例如查看、编辑、删除...)
    • 对象或资源(“TODO”项)及其容器(仪表板)。

    这意味着您可以开始根据属性重写您的需求。这变成:

    • A user can do action == "view" on object of type == "TODO" if user.username == object.dashboard.owner

    然后你可以添加:

    • deny all access if object.dashboard.owner != user.username

    编写此类策略的语言称为 ALFA( / Wikipedia,授权的缩写语言。这是由 OASIS XACML 定义的标准。

    定义策略后,您需要部署、运行和执行它们。这就是 ABAC 架构发挥作用的地方:

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

    那么问题就变成了:你想在哪里执行?您的 MERN 架构是什么样的?是否要授权:

    • 在 Web UI 中? (功能性身份验证)
    • 在 API 层(事务性 authZ)
    • 在数据层(以数据为中心的 authZ / 过滤)

    例如,您想过滤来自 MongoDB 的数据并只显示允许的结果吗?是否要在 API 层应用授权? API 网关(例如 Kong)可以通过授权插件帮助您实现这一目标,例如Axiomatics-Kong.

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

    【讨论】:

      猜你喜欢
      • 2019-12-10
      • 2018-07-25
      • 2010-11-14
      • 2021-11-08
      • 2013-08-08
      • 2017-09-11
      • 2023-03-23
      • 1970-01-01
      相关资源
      最近更新 更多