Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
symfony2 rest api,具有独立的客户端和最终用户安全性_Api_Security_Rest_Symfony_Oauth 2.0 - Fatal编程技术网

symfony2 rest api,具有独立的客户端和最终用户安全性

symfony2 rest api,具有独立的客户端和最终用户安全性,api,security,rest,symfony,oauth-2.0,Api,Security,Rest,Symfony,Oauth 2.0,我正在symfony2上构建一个restapi,我不确定管理不同安全级别的最佳方法是什么 未经验证的客户端(没有访问API数据权限的应用程序或网站)无法从API获取(获取、放置、发布等)数据 经过身份验证的客户端将能够从API请求一些数据,但不能请求与用户相关的数据 另一方面,最终用户需要以某种方式登录才能从API访问一些私有资源 例如,api/v1/哲理将向经过身份验证的客户端列出所有phylosophies。未注册的最终用户可以看到列表:“理想主义、现实主义、生存主义,…”。 但最终用户

我正在symfony2上构建一个restapi,我不确定管理不同安全级别的最佳方法是什么

  • 未经验证的客户端(没有访问API数据权限的应用程序或网站)无法从API获取(获取、放置、发布等)数据
  • 经过身份验证的客户端将能够从API请求一些数据,但不能请求与用户相关的数据
  • 另一方面,最终用户需要以某种方式登录才能从API访问一些私有资源
例如,
api/v1/哲理
将向经过身份验证的客户端列出所有phylosophies。未注册的最终用户可以看到列表:“理想主义、现实主义、生存主义,…”。 但最终用户需要获得授权(注册和登录)才能通过
api/v1/user/{userID}/favorites
访问他们喜爱的phylosophies

我一直在阅读和测试FOSUserBundle、FOSRestBundle和FOSOAuthServerBundle的内容,但我发现的所有信息都会被用户记录下来,以便获得令牌,并且整个api都受到客户端和用户的保护

有什么想法吗

有灯光吗


请?

FOSRest和FOSAuth可以满足您的需要,只是看起来您需要更改security.yml中定义访问的方式。您必须始终登录才能访问资源的唯一原因是资源受到保护。如果您有一个允许匿名访问的资源,请在security.yml中输入该项,如下所示:

security:
    access_control:
        - { path: ^/api/v1/pilosophies$, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/api/v1, roles: IS_AUTHENTICATED_FULLY }
这将使
/api/v1/pilosophies
无需登录即可访问,但所有其他资源仍将受到保护。您可以在文档中阅读更多关于此的信息


归根结底,你是决定哪些资源得到保护与否的人。FOSOAuth与该决定无关。

那么,为了使用api,客户端的流程是什么呢?初始化时通过/oauth/v2/auth///oauth/v2/token获取令牌,然后使用api。当最终用户试图从api的受保护部分访问信息时,api将返回登录表单?我理解api应返回未经授权的访问错误或类似错误,用户应以某种方式登录。我想用户也会通过oauth登录。我有点困惑。如果用户获得oAuth令牌,那么他已经登录了,所以不需要登录表单。只要他有一个令牌,他就应该能够访问api.mh的任何受保护部分。。。我想我错了。我如何知道哪些网站或应用程序可以访问API?我想我也会使用oauth。为了让应用程序或网站能够访问你的api,你必须给他们一个
client\u id
client\u secret
。因此,您可以控制谁有权访问您的api。oAuth2有几种“授权类型”。请阅读,它将帮助您理解不同的oAuth概念,并且是设置FOSOAuthServerBundle的一个很好的教程