安全UI但公开允许AJAX请求

时间:2018-04-02 16:01:06

标签: symfony symfony4 api-platform.com

我正在使用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请求分离安全配置?

2 个答案:

答案 0 :(得分:0)

不确定我是否做得对,但您想限制/api/doc(或者您用于文档的任何网址),因此请将其添加到security.yaml中的access_control

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

答案 1 :(得分:0)

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

id, my_col (df1.my_col original value), id, other_id, my_col (newly computed my_col)

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

# 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