Я просмотрел несколько решений с помощью централизованной службы входа в систему.
Моя ситуация выглядит следующим образом:
- Центральный логин под 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
Что я пропустил?
Я не знаю, что пытается сказать мне эта ошибка.