Symfony2 сервер oauth2

Я хочу создать сервер oauth2 для своих сайтов (3 сайта, 1 логин). Я создал сервер, использовал FOSUserBundle и FOSOAuthServerBundle, следовал инструкциям.

Но у меня 1 проблема. Я могу создать токен через /oauth/v2/token, это нормально. Я могу перейти на /oauth/v2/oauth, но когда меня перенаправляют на веб-сайт, у меня есть example.com?error=invalid_request&error_description=Invalid+response+type.

И если я войду в /login, я войду в систему, но токен не будет создан. Это было бы хорошо, если бы у меня был только 1 веб-сайт, но я хотел бы сделать что-то более похожее на Google (если вы находитесь на картах, YouTube... если вы хотите войти, вы будете перенаправлены на account.google.com, войдите , а затем вернуться на веб-сайт), но я не понимаю, как это сделать прямо сейчас. Я думаю, мне нужно больше работать, но где именно?

Мой security.yml прямо сейчас:

security:
encoders:
    FOS\UserBundle\Model\UserInterface: sha512

role_hierarchy:
    ROLE_ADMIN:       ROLE_USER
    ROLE_SUPER_ADMIN: ROLE_ADMIN

providers:
    fos_userbundle:
        id: fos_user.user_provider.username

firewalls:
    main:
        pattern: ^/
        form_login:
            provider: fos_userbundle
            csrf_provider: form.csrf_provider
        logout:       true
        anonymous:    true

    oauth_token:
        pattern:    ^/oauth/v2/token
        security:   false

    oauth_authorize:
        pattern:    ^/oauth/v2/auth
        anonymous: true

    api:
        pattern:    ^/api
        fos_oauth:  true
        stateless:  true
        anonymous:  false # can be omitted as its default value

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: ^/api, roles: [ IS_AUTHENTICATED_FULLY ] }

Должен ли я создать новую страницу входа или провайдера пользователя? Спасибо :)


person Arvi89    schedule 20.01.2015    source источник
comment
Кажется, ваш запрос к /oauth/v2/auth имеет неверный формат. Я использовал эту статью, чтобы понять FosOauthBundle: blog.tankist.de/blog/2013/07/16/. Может быть, вы могли бы прочитать это. Не могли бы вы написать здесь /oauth/v2/auth параметры вашего запроса?   -  person loicfavory    schedule 20.01.2015
comment
Конечно, это: /oauth/v2/auth?client_id=CLIENT_ID&redirect_uri=example.com Когда я захожу туда, Мне нужно войти в систему (со страницы входа в систему fosuser), затем я попадаю на страницу отказа в разрешении из fosauthserverbundle, затем меня перенаправляют на example.com с ошибкой, и токен не создается.   -  person Arvi89    schedule 20.01.2015


Ответы (1)


Вы не указали тип ответа. Вы должны использовать этот запрос:

PROVIDER_HOST/oauth/v2/auth?client_id=CLIENT_ID&response_type=code&redirect_uri=CLIENT_HOST

Затем получите доступ с кодом:

CLIENT_HOST/?code=Yjk2MWU5YjVhODBiN2I0ZDRkYmQ1OGM0NGY4MmUyOGM2NDQ2MmY2ZDg2YjUxYjRiMzAwZTY2MDQxZmUzODg2YQ

Затем запросите токен:

PROVIDER_HOST/oauth/v2/token?client_id=CLIENT_ID&client_secret=CLIENT_SECRET&grant_type=authorization_code&redirect_uri=http%3A%2F%2Fclinet.local%2F&code=CODE

Дополнительная информация здесь: http://blog.tankist.de/blog/2013/07/18/oauth2-explained-part-3-using-oauth2-with-your-gore-hands/

person loicfavory    schedule 20.01.2015
comment
О, последнее, если это мой веб-сайт, я не хочу иметь шаг разрешения/запрета, должен ли я переопределить контроллер, чтобы добавить исключение для некоторого uri, или есть другой способ? edit: я сначала прочитаю страницу 3 блога, прежде чем задавать другие вопросы :) - person Arvi89; 20.01.2015
comment
Для этого вы должны запросить токен без использования запроса авторизации. Например, вы можете разрешить своему КЛИЕНТУ client_credentials Grant_type. Прочитайте все страницы блога, это хорошо документировано. И действительный мой ответ, пожалуйста;) - person loicfavory; 20.01.2015