php - FOSRestBundle 添加 http 基本认证

标签 php symfony basic-authentication fosrestbundle

我将 FOSRestBundle 添加到我的 symfony2 应用程序,这个应用程序已经有一个公共(public)区域和一个受 FOSUserBundle 保护的管理区域。

我的问题是,我没有让浏览器提示输入用户名/密码,而且,当使用 curl 连接 api 时,我没有获得授权。

# app/config/security.yml
providers:
    user:
        id: fos_user.user_provider.username
    administrator:
        entity: { class: App\UserBundle\Entity\Administrator, property: login }

现在我添加了一个api区,想使用基本的http auth,所以添加了一个新的提供者

    api_provider:
        memory:
            users:
                user1: { password: 1234, roles: 'ROLE_API_USER' }
                user2: { password: 1234, roles: 'ROLE_API_USER' }

还有一个新的防火墙:

firewalls:
    backend:
        pattern:        ^/admin/
        provider:       administrator
        anonymous:      ~
        form_login:
            login_path: /admin/login
            check_path: /admin/login_check
        logout:
            path:       /admin/logout
            target:     /admin/
    api:
        pattern:  ^/api/
        provider: api_provider
        anonymous: ~
        # form_login: false # <- needed or not?
        http_basic:
            realm: "Api"
    main:
        pattern: ^/
        form_login:
            login_path: /login
            check_path: /login_check
            provider: user
            csrf_provider: form.csrf_provider
        logout:       true
        anonymous:    true

此时我得到一个 403 - Forbidden,所以如果我添加这个 security.yml:

access_control:
    - { path: ^/admin/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/admin/user, role: ROLE_ADMIN_USUARIOS }
    - { path: ^/admin/, role: ROLE_ADMIN }
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/error, role: ROLE_USER }
    - { path: ^/api/, role: ROLE_API_USER }
    - { path: ^/api/v1/users, role: ROLE_API_USER }

在此之后,我得到一个 401 - unauthorized

虽然 http basic auth 强制浏览器提示输入用户/密码,但这并没有发生。虽然,我最终需要的是服务器接受 http 请求中的基本身份验证 header ,如 this one .

我是不是漏了什么?

谢谢

最佳答案

解决方案

显然,现在调用这些 url 的唯一方法是通过 http 连接,例如 curl 添加授权 header ,例如:

curl -u "user:pass" "http://example.com/app_dev.php/api/v1/users/1.json"

通过浏览器访问不会提示用户/密码。

此外,新提供程序需要一个编码器才能正常工作:

# app/config/security.yml
encoders:
    Symfony\Component\Security\Core\User\User: plaintext

关于php - FOSRestBundle 添加 http 基本认证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24973266/

相关文章:

php - 使用 Symfony2 安装 MongoDbBundle

php - 通过刷新时的外部实体异常来 Doctrine OneToOne 身份

asp.net-mvc-4 - MVC WebApi + 基础认证 + JSONP跨域

PHP 标签关闭——什么时候需要?

javascript - 如何显示所选商品的附加值?

php - MySQL 计算列滞后返回

authentication - Symfony 2 身份验证与(学说)实体

asp.net-mvc - 在ASP.NET Core中使用多种身份验证方案

json - 如何解决flutter中的http error code 400 missing parameters?

php - Controller (php)错误。这是什么意思?