2014-07-26 45 views
3

我在我的symfony2應用中添加了FOSRestBundle,這個應用已經有一個公共區域和一個受FOSUserBundle保護的管理區域。FOSRestBundle add http basic auth

我的問題是,我沒有得到瀏覽器提示用戶/密碼,而且,當連接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認證,所以增加了一個新的提供

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 

在這一點上我LEEP得到一個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請求中的基本身份驗證標頭。

我我錯過了什麼?

由於

+3

如果你解決你自己的問題,你可以將它張貼作爲回答自己的問題:) – tgies

回答

3

SOLUTION

顯然現在來調用這些網址的唯一方式是通過和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 
+2

我不得不更改'匿名'爲'false'。 – Furgas