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