Я пытаюсь создать проект, где я могу аутентифицировать пользователей через API
и Web
интерфейсы (формы входа). До сих пор я могу управлять, чтобы работать только с одной формой входа, который является основным Web
- формы Войти. Мне нужно аутентифицировать их через API
и вывести форму oauth, настроенную с сообщением, чтобы уведомить пользователя об авторизации, просто в основном пользовательское сообщение. Возможно, что-то вроде facebook.
На странице безопасности Symfony2 я не мог найти помощь, необходимую до сих пор, ни в блогах. По крайней мере, не тот, который работает для меня.
Таким образом, идеальный сценарий
http://url.com/
для web
http://url.com/api
для api
Я использую FOS User Bundle для своих пользователей и FOS OAuth Bundle для аутентификации oauth и FOSRestBundle для REST API.
Как объясняется в этом учебном пособии, это точный сценарий, который я пытаюсь достичь.
Когда я прошу URL-адрес, например http://url.com/oauth/v2/token?client_id=24_2qxtvmjv99eso8wg8sowc8c04o488og8gs8wo0osocks0wkcw0&client_secret=33ghqa2w202sooscwogw0kwwwg0gc00k8sgkkw0cgco4cg08s0&grant_type=client_credentials
он перенаправляет меня на страницу входа. Где, как я понимаю, мой access_control
ошибочен.
Это мой файл security.yml:
security:
encoders:
FOS\UserBundle\Model\UserInterface: bcrypt
role_hierarchy:
ROLE_USER: [ROLE_CUSTOMER_RSS, ROLE_CUSTOMER_ASS]
ROLE_AGENT: ROLE_USER
ROLE_ADMIN: ROLE_AGENT
ROLE_SUPER_ADMIN: ROLE_ADMIN
providers:
fos_userbundle:
id: fos_user.user_provider.username
firewalls:
oauth_token:
pattern: ^/oauth/v2/token
security: false
oauth_authorize:
pattern: ^/oauth/v2/auth
form_login:
provider: fos_userbundle
check_path: /oauth/v2/auth_login_check
login_path: /oauth/v2/auth_login
api:
pattern: ^/api
fos_oauth: true
stateless: true
anonymous: false # can be omitted as its default value
ui_login:
pattern: ^/
form_login:
login_path: fos_user_security_login
check_path: fos_user_security_check
provider: fos_userbundle
csrf_provider: form.csrf_provider
default_target_path: /
logout: true
anonymous: true
assets:
pattern: ^/(css|images|js)/
security: false
dev:
pattern: ^/(_(profiler|wdt|configurator|error))/
security: false
access_control:
- { path: ^/oauth/v2/auth_login, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/logout, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/, role: [ROLE_USER] }
Я знаю, что здесь много чего не хватает. Пожалуйста помоги.
Важен порядок ваших брандмауэров. То, как вы его настроили прямо сейчас, первый "улавливающий" брандмауэр для URL-адресов "^/" захватывает все запросы, поэтому другие брандмауэры не активируются. В первую очередь следует установить более конкретные межсетевые экраны, а менее конкретные брандмауэры должны быть расположены позже. Таким образом, брандмауэр ui_login
должен быть последним
http://url.com/oauth/v2/auth_login
я получаю цикл перенаправления. Любая помощь с этим? Я буду обновлять мой security.yml здесь.