【问题标题】:symfony2 rest api with separated client and end user security具有分离客户端和最终用户安全性的 symfony2 rest api
【发布时间】:2014-02-06 00:27:27
【问题描述】:

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

  • 未经身份验证的客户端(无权访问 API 数据的应用或网站)无法从 API 获取(获取、放置、发布等)数据
  • 经过身份验证的客户端将能够从 API 请求一些数据,但不能请求与用户相关的数据。
  • 另一方面,最终用户需要以某种方式登录才能从 API 访问一些私有资源。

例如,api/v1/philosophies 将列出所有经过身份验证的客户端的原理。未注册的最终用户可以看到列表:“理想主义、现实主义、存在主义……”。 但是最终用户需要获得授权(注册和登录)才能通过api/v1/user/{userID}/favorites 访问他们最喜欢的哲学。

我一直在阅读和测试 FOSUserBundle、FOSRestBundle 和 FOSOAuthServerBundle 的内容,但我发现的所有信息都是用户始终登录以获取令牌,并且整个 api 都受到客户端和用户的保护。

有什么想法吗?

有点光?

请?

【问题讨论】:

    标签: api security rest symfony oauth-2.0


    【解决方案1】:

    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 无需登录即可访问,但所有其他资源仍将受到保护。您可以在文档Securing specific url patterns

    中阅读更多相关信息

    最终,您是决定哪些资源受保护或不受保护的人。 FOSOAuth 与该决定无关。

    【讨论】:

    • 那么客户端使用 api 的流程是什么?在初始化时通过 /oauth/v2/auth // /oauth/v2/token 获取令牌,然后使用 api。每当最终用户尝试从 api 的受保护部分访问信息时,api 都会返回登录表单¿??¿ 我知道 api 应该返回未经授权的访问错误或类似的东西,并且用户应该以某种方式登录。我认为用户也会通过 oauth 登录。我有点困惑。
    • 如果用户获得了 oAuth 令牌,那么他已经登录,因此不需要登录表单。只要他有令牌,他就应该能够访问 api 的任何受保护部分。
    • mh...我想我错了。我如何知道哪些网站或应用程序可以访问 API?我想我也会为此使用 oauth。
    • 为了让应用程序或网站能够访问您的 api,您必须为他们提供 client_idclient_secret。因此,您可以控制谁可以访问您的 api。
    • oAuth2 有几个“grant_types”。阅读this blog post,它将帮助您了解不同的 oAuth 概念,并且是设置 FOSOAuthServerBundle 的绝佳教程
    猜你喜欢
    • 1970-01-01
    • 2018-07-28
    • 2019-05-05
    • 1970-01-01
    • 2012-02-21
    • 1970-01-01
    • 2017-11-16
    • 2012-02-28
    • 2012-11-20
    相关资源
    最近更新 更多