【问题标题】:Secure UI but publicly allow AJAX request安全的 UI,但公开允许 AJAX 请求
【发布时间】:2018-09-11 20:43:38
【问题描述】:

我正在使用 API 平台开展一个项目。

我希望通过基本身份验证保护 UI 的文档,同时一些路由应该是公开的。

例如:

/**
 * An ordered dish.
 *
 * @ApiResource(
 *     attributes={"access_control"="is_granted('ROLE_USER')"},
 *     collectionOperations={
 *         "get"={"access_control"="is_granted('IS_AUTHENTICATED_ANONYMOUSLY')"},
 *         "post"={"access_control"="is_granted('ROLE_ADMIN')"}
 *     },
 *     itemOperations={
 *         "get"={"access_control"="is_granted('IS_AUTHENTICATED_ANONYMOUSLY')"}
 *     }
 * )
 *
 * @ORM\Entity
 * @ORM\Table(name="uitgekookt_dish")
 */
class Dish

当我在浏览器中查看文档时,我可以简单地访问 /api/dishes,因为 IS_AUTHENTICATED_ANONYMOUSLY。我还看到了其他可用的 get/post 方法(尽管一些 post 方法是安全的)。

但是,这些文档根本不应该公开。在 Symfony 4 中,我如何确保为 docs 和 ajax 请求分离我的安全配置?

【问题讨论】:

    标签: symfony symfony4 api-platform.com


    【解决方案1】:

    首先,禁用为每个页面加载的 Swagger UI,并将其注册为this docs entry 中指出的已知位置:

    # app/config/routes.yaml
    api_platform:
        # ...
        enable_swagger_ui: false
    
    # app/config/routes.yaml
    swagger_ui:
        path: /api/docs
        controller: api_platform.swagger.action.ui
    

    然后,正如@zajca 所指出的,添加访问控制路由以保护此页面以及底层 JSON 和 Hydra 端点:

     security:
        access_control:
            - { path: ^/api/docs, roles: [ROLE_ADMIN] }
    

    【讨论】:

      【解决方案2】:

      不确定我是否正确,但您想限制 /api/doc(或您用于文档的任何 url)所以将其添加到 security.yaml 中的 access_control

      security:
          access_control:
              - { path: ^/api/doc, roles: [ROLE_ADMIN] }
      

      【讨论】:

      • API 平台中的文档可通过 /api 获得。没有/doc
      猜你喜欢
      • 2014-10-28
      • 2017-03-15
      • 1970-01-01
      • 2012-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-29
      • 2016-03-03
      相关资源
      最近更新 更多