如何在PHP中实现基于属性的访问控制(ABAC)

时间:2017-05-03 11:22:55

标签: php json xacml abac

我只是找到一个AT& T的框架来构建ABAC。

此框架使用遵循XML格式的XACML来创建规则。但是这个框架只是为Java实现的。

但是,我正在使用PHP,而我正在使用JSON编写规则。

我的解决方案是否正确?您可以建议一些支持PHP的框架或解决方案吗?

3 个答案:

答案 0 :(得分:3)

完成David关于AuthzForce的答案:它是开源的,符合XACML 3.0,并为PAP和PDP提供Java API(AuthzForce Core)和REST API。因此,您可以使用PHP程序中的REST API。 API支持PAP和PDP接口的XML和JSON格式。但是,我们没有使用XACML的JSON配置文件用于PDP。相反,对于整个API,我们使用Apache CXF提供的映射约定。这种约定允许从XML(更确切地说是实现代码中使用的内部XML派生模型)自动转换为JSON,反之亦然。

编辑(2018-02-26): AuthzForce Core和Server现在都支持PDP的XACML标准JSON配置文件。 AuthzForce还提供了基于Core的最小RESTful PDP,可以打包为Spring-boot应用程序,也可以只是JAX-RS实现,可以在任何JAX-RS框架中重用。

答案 1 :(得分:2)

AT& T框架是几年前由AT& T设计的R& D框架,然后发布到Apache。根据{{​​3}},它仍然是活跃的。我不知道该产品的任何商业用途(虽然我怀疑AT& T自己使用它)。

使用的三个主要框架是:

  • WSO2 github。这是一个开源Java PDP。它也捆绑为WSO2 Identity Server的一部分。大多数开源用户都使用Balana。
  • SunXACML:这是原始的XACML 3.0实现。它很老但很坚固(已经存在了10年左右)。它也是开源和Java。
  • Balana。这是一个商业解决方案(免责声明:我为Axiomatics工作)。这是最普遍的商业解决方案。它也是用Java实现的,但也支持PHP的集成。

您可以在Axiomatics Policy Server上找到此信息。还有一个名为AuthZForce的有趣引擎,但我对它没什么经验。

所有这些引擎AFAIK都使用XACML的XML格式来存储策略。您声称需要JSON。 JSON中没有XACML的策略配置文件。关于这个主题有一个问题,你可以XACML's wikipedia page

鉴于Axiomatics Policy Server作为JSON API公开,您可以使用它与PHP集成。其他引擎可能有类似的方法。如果您使用Amazon AWS,则可以请求read here的副本。

ABAC是技术中立的,这意味着它不是特定于Java,Ruby,.NET,PHP或任何其他语言。 PDP引擎的编写内容与您编写的应用程序无关,只要您可以将两者集成在一起。

我希望这有帮助, 大卫。

答案 2 :(得分:0)

TYPO3 Access Control组件实现ABAC,该ABAC支持基于Jiang, Hao & Bouabdallah, Ahmed (2017)的简单但具有表现力的访问控制策略语言,并且是用PHP编写的。

检出JSON schema,以快速了解访问控制策略语言。该组件是精益和灵活的。它既没有考虑格式,也没有考虑策略语言的表达语言。例如,您可以使用YAML和Symfony expression language。这样的政策可能看起来像这样:

description: 'Root policy set.'
algorithm: highestPriority
policies:
    Admin:
        target: 'hasAuthority("typo3:security:principal:admin")'
        description: 'Administrator policy'
        priority: 100
        rules:
            -
                effect: permit
    Default:
        description: 'Deny everything per default.'
        rules:
            -
                obligation:
                    deny:
                        Feedback: ['Access denied.']