【问题标题】:Fine-grained authorization (based on business data) in Neo4JNeo4J 中的细粒度授权(基于业务数据)
【发布时间】:2014-01-15 15:28:16
【问题描述】:

我想在使用默认 Neo4J REST API 访问的 Neo4j 数据库中实现细粒度授权。

业务数据和授权规则会被持久化在同一个图数据库中。每个节点都将具有来自代表应用程序用户的其他节点的传入关系“CAN_ACCESS”。

我想在 GET 请求上实现某种具有以下行为的拦截器:

  • 读取授权头
  • 正常执行get
  • 根据要返回的节点,检查授权头中的用户是否与检索到的节点有“CAN_ACCESS”关系。如果答案是否定的,则将响应代码更改为 401。

Neo4j Server API 中有一个类我可以扩展以将此算法插入我的服务器吗?我想我需要一个地方来处理请求、响应和检索到的数据。

【问题讨论】:

    标签: security neo4j authorization


    【解决方案1】:

    也许您可以考虑覆盖节点的 RepresentationFormat 并在那里签入。

    您可能必须注册一个自定义内容类型才能使其工作。

    另一种选择是向 Neo4j 服务器添加过滤器并重新解析响应并在那里检查您的安全规则。

    也许身份验证扩展中使用的过滤器可以帮助您作为示例:

    https://github.com/neo4j-contrib/authentication-extension/tree/2.0

    【讨论】:

    • 谢谢。实际上,我对如何实施第一个解决方案有点困惑。第二个对我来说更清楚,我不喜欢重新解析部分,但它可以工作。
    【解决方案2】:

    您可以为此实现SecurityRule。 SecurityRule 是对服务器的任何请求都需要通过的过滤器。

    【讨论】:

    • 好的,那么我怎样才能从 SecurityRule 对象访问检索到的节点呢? isAuthorized 方法不会公开此信息。
    猜你喜欢
    • 2018-01-16
    • 1970-01-01
    • 2011-12-20
    • 2019-03-28
    • 1970-01-01
    • 2011-02-17
    • 2023-03-25
    • 1970-01-01
    • 2011-06-23
    相关资源
    最近更新 更多