0

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

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

И если я запишусь в/логин, я войду в систему, но не будет создан токен. Это было бы хорошо, если бы у меня был только 1 сайт, но я хотел бы сделать что-то большее, как Google (если вы на картах, youtube ... если вы хотите войти в систему, вы перенаправлены на accounts.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 ] } 

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

+0

кажется ваш запрос/oauth/v2/auth неверен. Я использовал эту статью, чтобы понять FosOauthBundle: http://blog.tankist.de/blog/2013/07/16/oauth2-explained-part-1-principles-and-terminology/. Может быть, вы могли бы это прочитать. Не могли бы вы написать здесь/oauth/v2/auth ваши параметры запроса? – loicfavory

+0

Несомненно, это: /oauth/v2/auth?client_id=CLIENT_ID&redirect_uri=http://www.example.com Когда я иду туда, я должен войти (с страницей входа в систему fosuser), затем я прихожу страницу deny-allow из fosauthserverbundle, тогда я перенаправлен на example.com, с ошибкой, и не создается токен – Arvi89

ответ

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-bare-hands/

+0

А, спасибо, у меня не было ответа, спасибо! :) – Arvi89

+0

О, последнее, если это мой сайт, я не хочу иметь шаг разрешить/запретить, должен ли я переопределить контроллер для добавления исключения для некоторого uri или есть другой способ? edit: Сначала я прочитаю страницу 3 блога, прежде чем задавать другие вопросы :) – Arvi89

+0

Для этого вам следует запросить токен без использования запроса auth. Например, вы можете разрешить вашему клиенту «grant_type» client_credentials. Читайте все страницы блога, это хорошо документировано. И верный мой ответ, пожалуйста;) – loicfavory

Смежные вопросы