我将 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/