我如何保护 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
我使用 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