FOSRestBundle добавить базовую аутентификацию http
Я добавил FOSRestBundle в свое приложение symfony2, в этом приложении уже была общедоступная область и область администрирования, защищенная FOSUserBundle.
Моя проблема в том, что я не заставляю браузер запрашивать пользователя/пароль, а также при подключении api с curl
Я не получаю разрешения.
# app/config/security.yml
providers:
user:
id: fos_user.user_provider.username
administrator:
entity: { class: App\UserBundle\Entity\Administrator, property: login }
Теперь я добавил область api и хочу использовать базовую аутентификацию http, поэтому добавил нового поставщика
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-запросах, таких как этот.
Я что-то упускаю?
Спасибо
1 answers
РЕШЕНИЕ
По-видимому, единственный способ вызвать эти 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