我把FOSRestBundle添加到我的symfony2应用程序中,这个应用程序已经有了一个公共区域和一个受FOSUserBundle保护的管理区域。
我的问题是,我没有得到浏览器提示用户/密码,而且,当连接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。
我认为强制浏览器提示用户/pass,这是不会发生的。不过,我最终需要的是服务器在http请求(如这一个 )中接受一个基本的auth头。
我遗漏了什么吗?
谢谢
发布于 2014-07-27 08:05:10
溶液
显然,现在调用这些urls的唯一方法是通过和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: plaintexthttps://stackoverflow.com/questions/24973266
复制相似问题