0

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

4

2 回答 2

0

首先,禁用为每个页面加载的 Swagger UI,并将其注册为此文档条目中指出的已知位置:

# 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] }
于 2018-05-14T22:59:55.390 回答
0

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

security:
    access_control:
        - { path: ^/api/doc, roles: [ROLE_ADMIN] }
于 2018-04-05T11:04:00.757 回答