hwi_oauth无法连接到FOS_OAUTH_SERVER

时间:2019-03-21 07:24:05

标签: oauth-2.0 hwioauthbundle fosoauthserverbundle symfony-4.2

我通过集中式登录服务浏览了几种解决方案。

我的情况如下:

  • login.domain.tld下的中央登录
  • backend.domain.tld下的后端
  • 位于以下位置的客户服务:support.domain.tld
  • frontend在frontend.domain.tld下
  • accounts.domain.tld下的帐户和发票

我按照配置(包括表等)中提到的正确路由设置了Symfony oauth服务器的朋友。

我还为backend.domain.tld添加并oauth登录令牌等

据我所知,一切都是按原样设置的。 (无需太多配置)

在后端,我在版本0.6.x中安装了hwi_oauth软件包

这些是配置文件:

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

由于我需要替换dev系统网址(xxx.domain.test及其有效的副本),因此需要env文件

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 ]

Bundle Domain \ Library \ EntitiesBundle \ Entities \ User \ User是一个私有Bundle,其中包含所有迁移数据和实体表。

最后但并非最不重要的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的链接(我从未在任何地方进行配置)。 如果我单击它,它将重定向到/ login 但我在日志中看不到连接。

有什么线索可以监督吗? 我正在努力使它工作大约一周。 通过几个示例进行了工作,但我无法使其正常工作。

感谢您的帮助。

软件:Symfony 4.2,PHP7.3 MySQL 8,Redis作为缓存


更新:到目前为止,我已经能够使它工作。 我缺少/ connect / ....路径的access_control规则。

现在我可以看到一个允许/拒绝按钮。

但是一旦我同意,我就会进入分析器,将以下URL重定向到登录页面:

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

我错过了什么? 我不知道此错误试图告诉我什么。

1 个答案:

答案 0 :(得分:0)

问题解决了。

问题与防火墙设置中的问题以及授权范围缺失有关。