Symfony2 firewall Web & API аутентификация

1

Я пытаюсь создать проект, где я могу аутентифицировать пользователей через API и Web интерфейсы (формы входа). До сих пор я могу управлять, чтобы работать только с одной формой входа, который является основным Web - формы Войти. Мне нужно аутентифицировать их через API и вывести форму oauth, настроенную с сообщением, чтобы уведомить пользователя об авторизации, просто в основном пользовательское сообщение. Возможно, что-то вроде facebook.

На странице безопасности Symfony2 я не мог найти помощь, необходимую до сих пор, ни в блогах. По крайней мере, не тот, который работает для меня.

Таким образом, идеальный сценарий

  1. http://url.com/ для web
  2. 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] }

Я знаю, что здесь много чего не хватает. Пожалуйста помоги.

Теги:
oauth

1 ответ

1

Важен порядок ваших брандмауэров. То, как вы его настроили прямо сейчас, первый "улавливающий" брандмауэр для URL-адресов "^/" захватывает все запросы, поэтому другие брандмауэры не активируются. В первую очередь следует установить более конкретные межсетевые экраны, а менее конкретные брандмауэры должны быть расположены позже. Таким образом, брандмауэр ui_login должен быть последним

  • 0
    Да, это имело значение, спасибо! Теперь, когда я захожу на http://url.com/oauth/v2/auth_login я получаю цикл перенаправления. Любая помощь с этим? Я буду обновлять мой security.yml здесь.
  • 0
    Вероятно, вы должны сказать, что этот URL можно получить анонимно, не совсем уверен
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню