Symfony2基本的http auth,适用于curl但不适用于Android

时间:2012-01-29 15:48:48

标签: android httpwebrequest http-headers symfony

我正在尝试在symfony2服务器上验证用户身份。 身份验证适用于cli中的curl:

 curl "http://localhost:8080/app_dev.php/app/user/profile.json?id=4" -u foo:bar --basic

但是对于Android,我总是会遇到401错误:

 A Token was not found in the SecurityContext.

我该怎么做才能解决它?

这是我的security.yml:

security:
providers:
    fos_userbundle:
        id: fos_user.user_manager
encoders:
    BumpMe\UserBundle\Entity\User: sha512

firewalls:
    app:
        pattern: ^/app/.*
        stateless: true
        security: true

        http_basic:
            realm: "API"
    main:
        pattern: ^/
        form_login:
            provider: fos_userbundle
        logout:       true
        anonymous:    true


access_control:
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/admin/, role: ROLE_ADMIN }
    - { path: ^/app/, role: ROLE_USER }

role_hierarchy:
    ROLE_ADMIN:       ROLE_USER
    ROLE_SUPER_ADMIN: ROLE_ADMIN

另外,如何在base64中发送用户名和密码?因为目前在Android上它不希望base64和curl在base64上发送它...

我不明白这个错误...

1 个答案:

答案 0 :(得分:2)

抱歉,我发现了......

这只是因为Symfony需要base64编码。 base64编码在Android上不起作用,因为该方法在编码数据之后添加一个新行,所以它不一样......

通过简单的修剪就可以了:

"Basic "+Base64.encodeToString((login+":"+pass).getBytes(), Base64.DEFAULT).trim();

我认为这可能会有所帮助。