FOSRestBundle添加http基本身份验证

时间:2014-07-26 16:45:18

标签: php symfony basic-authentication fosrestbundle

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

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

# 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强制浏览器提示用户/通过,但这并没有发生。虽然,我最终需要的是服务器在this one等http请求中接受基本的auth标头。

我错过了什么?

由于

1 个答案:

答案 0 :(得分:3)

<强>解

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

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