Symfony2 базовый http auth, работает с curl, но не на Android - PullRequest
4 голосов
/ 29 января 2012

Я пытаюсь аутентифицировать пользователя на моем сервере symfony2.Аутентификация работает с curl в cli:

 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 Ответ

2 голосов
/ 29 января 2012

Извините, я узнаю ...

Это просто потому, что Symfony хотел закодировать base64.Кодировка base64 не работает на Android, потому что метод добавляет новую строку после закодированных данных, так что это не то же самое ...

С простой обрезкой все нормально:

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

Я думаю, что это может быть полезно.

...