我如何保护 Symfony2 REST API

How do I secure a Symfony2 REST API

我使用 security.yml 和 access_control 来根据用户角色保护 API 路径。这工作正常,但我如何保护特定参数,如 /api/project/:id? 不同的用户可以访问不同的项目 ID。因此必须进行数据库调用以检查该用户是否有权访问该项目。

我尝试使用 $this->denyAccessUnlessGranted('GET', $projectId, 'Unauthorized access!');在 ProjectController 中,它调用自定义选民来检查数据库,从而检查访问权限。

public function getProjectAction(Request $request, $id)
{
    $this->denyAccessUnlessGranted('GET', $id, 'Unauthorized access!');

这行得通,但是将此代码添加到 ProjectController 中的 10 多个操作以及 API 的许多部分似乎非常不切实际。

因此我的问题是:使用 symfony2、fosUserBundle 和 fosRestBundle

保护 REST api 的最佳实践是什么

我建议引入安全选民。

http://symfony.com/doc/current/cookbook/security/voters_data_permission.html

同时创建某种异常处理程序/侦听器,以捕获您的异常并做出特定的错误响应。

http://symfony.com/doc/current/cookbook/service_container/event_listener.html