【问题标题】:FOSRestBundle add http basic authFOSRestBundle 添加 http 基本身份验证
【发布时间】:2014-07-26 16:45:17
【问题描述】:

我将 FOSRestBundle 添加到我的 symfony2 应用程序中,该应用程序已经有一个公共区域和一个受 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 请求中的基本身份验证标头,例如 this one

我错过了什么?

谢谢

【问题讨论】:

  • 如果您解决了自己的问题,您可以将其发布为您自己问题的答案 :)

标签: php symfony basic-authentication fosrestbundle


【解决方案1】:

解决方案

显然,现在调用这些 url 的唯一方法是通过 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

【讨论】:

  • 我也必须将anonymous 更改为false
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-21
  • 2011-11-12
  • 2011-05-05
  • 1970-01-01
  • 1970-01-01
  • 2011-06-10
相关资源
最近更新 更多