首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FOSRestBundle添加http basic auth

FOSRestBundle添加http basic auth
EN

Stack Overflow用户
提问于 2014-07-26 16:45:17
回答 1查看 4.1K关注 0票数 3

我把FOSRestBundle添加到我的symfony2应用程序中,这个应用程序已经有了一个公共区域和一个受FOSUserBundle保护的管理区域。

我的问题是,我没有得到浏览器提示用户/密码,而且,当连接curl时,我没有得到授权。

代码语言:javascript
复制
# app/config/security.yml
providers:
    user:
        id: fos_user.user_provider.username
    administrator:
        entity: { class: App\UserBundle\Entity\Administrator, property: login }

现在,我添加了一个api区域,并希望使用基本的http auth,因此添加了一个新的提供程序。

代码语言:javascript
复制
    api_provider:
        memory:
            users:
                user1: { password: 1234, roles: 'ROLE_API_USER' }
                user2: { password: 1234, roles: 'ROLE_API_USER' }

还有一个新的防火墙:

代码语言:javascript
复制
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

代码语言:javascript
复制
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头。

我遗漏了什么吗?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-27 08:05:10

溶液

显然,现在调用这些urls的唯一方法是通过和http连接,比如添加授权头的curl

代码语言:javascript
复制
curl -u "user:pass" "http://example.com/app_dev.php/api/v1/users/1.json"

通过浏览器进行访问不会提示用户/传递。

还有,新的提供程序需要一个编码器才能正常工作:

代码语言:javascript
复制
# app/config/security.yml
encoders:
    Symfony\Component\Security\Core\User\User: plaintext
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24973266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档