2014-07-26 7 views
3

symfony2 앱에 FOSRestBundle을 추가했습니다.이 앱에는 이미 공용 영역과 FOSUserBundle로 보호되는 관리 영역이 있습니다.FOSRestBundle http 기본 인증 추가

내 문제는 브라우저에 사용자/암호를 묻는 메시지가 표시되지 않으며 API를 curl에 연결할 때 권한이없는 것입니다. 내가 LEEP이 시점에서

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 

:

# 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' } 

그리고 새로운 방화벽을 추가 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 기본 인증 강제 브라우저가 사용자/암호를 묻는 메시지를 표시하지만 이는 발생하지 않습니다. 내가 마침내 필요한 것은 서버가 this one과 같은 http 요청에서 기본 인증 헤더를 수락하는 것입니다.

나는 뭔가를 놓치고 있습니까?

감사

+3

, 당신은 당신의 자신의 질문에 대한 답변으로 게시 할 수 있습니다 :) – tgies

답변

3

솔루션 분명히

지금이 URL을 호출 할 수있는 유일한 방법 curl 등을 통해 및 HTTP 연결이 예를 들어, 인증 헤더를 추가 :

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

I가 있었다 '익명'도'거짓'으로 바꿉니다. – Furgas