hwi_oauth не может подключиться к FOS_OAUTH_SERVER - PullRequest
0 голосов
/ 21 марта 2019

Я просмотрел несколько решений с помощью централизованной службы входа в систему.

Моя ситуация выглядит следующим образом:

  • Центральный логин под login.domain.tld
  • Backend под backend.domain.tld
  • Служба поддержки по адресу: support.domain.tld
  • фронтенд под frontend.domain.tld
  • учетная запись и счета по учетной записи .domain.tld

Я настроил друзей oauth-сервера Symfony с правильной маршрутизацией, как указано в конфигах, включая таблицы и т. Д.

Я также добавил токен логина и т. Д. Для backend.domain.tld

Насколько я мог видеть, все настроено так, как должно быть. (не так много, чтобы быть настроенным)

В Backend я установил пакет hwi_oauth в версии 0.6.x

Это файлы конфигурации:

httplug.yaml:

    httplug:
        plugins:
            redirect:
                preserve_header: true
        discovery:
            client: 'auto'
        clients:
            default:
                factory: 'httplug.factory.curl'
            app:
                http_methods_client: true
                plugins:
                    - 'httplug.plugin.content_length'
                    - 'httplug.plugin.redirect'
            hwi_special:
                factory: 'httplug.factory.guzzle6'
                config: # You pass here the Guzzle configuration, exactly like before.
                    timeout: 10
                    verify: false
                    max_redirects: 1
                    ignore_errors: false

HWI_oauth.yaml

    hwi_oauth:
        http:
            client: httplug.client.hwi_special
        firewall_names: [ main ]
        resource_owners:
            domain_oauth:
                type: oauth2
                client_id: '%env(OAUTH_CLIENT_ID)%'
                client_secret: '%env(OAUTH_CLIENT_TOKEN)%'
                access_token_url: '%env(OAUTH_PROVIDER)%'
                authorization_url: '%env(OAUTH_AUTHORISATION)%'
                options:
                    csrf: true
                infos_url:           '%env(OAUTH_USERINFO)%'
                scope:               "read"
                user_response_class: HWI\Bundle\OAuthBundle\OAuth\Response\PathUserResponse
                paths:
                    identifier: id
                    nickname:   username
                    realname:   fullname

нужны файлы env, поскольку мне нужно заменить системные URL-адреса dev (xxx.domain.test на его производный аналог)

the security.yaml

security:
  access_control:
    - path: ^/login
      roles: [ IS_AUTHENTICATED_ANONYMOUSLY ]
      requires_channel: https
    - path: ^/
      roles: ROLE_STAFF
      requires_channel: https
  providers:
    domain_provider:
      entity:
        class: Domain\Library\EntitiesBundle\Entities\User\User
        property: email
  # - { path: ^/admin, roles: ROLE_ADMIN }
  # - { path: ^/profile, roles: ROLE_USER }
  # https://symfony.com/doc/current/security.html#where-do-users-come-from-user-providers
  firewalls:
    dev:
      pattern: ^/(_(profiler|wdt)|css|images|js)/
      security: false
    main:
      anonymous: ~
      oauth:
        resource_owners:
          domain_oauth: "/login/domainLogin"
        login_path: "/login"
        use_forward: true
        failure_path: "/login"

        oauth_user_provider:
          service: Domain\Library\ClientAuthBundle\Authorisation\HwiOAuthProvider
  # Easy way to control access for large sections of your site
  # Note: Only the *first* access control that matches will be used
  role_hierarchy:
    ROLE_GUEST:
    ROLE_USER: [ ROLE_GUEST ]
    ROLE_STAFF: [ ROLE_USER ]

Домен пакета \ Библиотека \ EntitiesBundle \ Entities \ Пользователь \ Пользователь - это частный пакет, содержащий все данные миграции и таблицы объектов.

и, что не менее важно, twi_oauth_routing.yaml

    # app/config/routing.yml
    hwi_oauth_redirect:
        resource: "@HWIOAuthBundle/Resources/config/routing/redirect_41.xml"
        prefix:   /connect

    hwi_oauth_connect:
        resource: "@HWIOAuthBundle/Resources/config/routing/connect_41.xml"
        prefix:   /connect

    hwi_oauth_login:
        resource: "@HWIOAuthBundle/Resources/config/routing/login_41.xml"
        prefix:   /login

    domain_oauth_login:
        path: /login/domainLogin

Сложность, с которой я сейчас сталкиваюсь, заключается в том, что я не вижу попытки подключения в системе входа в систему, когда я вызываю backend.domain.test / login Я вижу ссылку, указывающую на / connect / domain-oauth (которую я нигде не настраивал). Если я нажму на это, он перенаправит меня на / логин Но я не вижу связи в логах.

Какие-нибудь подсказки, что я наблюдал? Я пытаюсь заставить это работать в течение недели. Проработал несколько примеров, но я не могу заставить его работать должным образом.

Любая помощь приветствуется.

Программное обеспечение: Symfony 4.2, PHP7.3 MySQL 8, Redis as Cache


Обновление: я смог заставить его работать до сих пор. Мне не хватало правила access_control для пути к / connect / .... path.

Теперь я вижу кнопки разрешения / запрета.

Но как только я нажимаю, я получаю в профилировщике следующий URL-адрес, он перенаправляется на страницу входа:

https://baclend.domain.tld/login/domainLogin?error=invalid_scope&error_description=An%20unsupported%20scope%20was%20requested.&state=51057e2ba6bd1540e5981e193c24ac9c

Что я пропустил? Я не знаю, что пытается сказать мне эта ошибка.

1 Ответ

0 голосов
/ 22 марта 2019

Проблема была решена.

Проблемы, связанные с проблемами в настройках брандмауэра и отсутствием области авторизации.

...