猿问

使用用户实体进行身份验证时如何在 Symfony 4 中使用独立的基本身份验证

我正在尝试使用 Symfony 4 (nginx) 为登台环境添加基本身份验证。不幸的是,它的效果并不好。如果您在防火墙设置 ( security.yaml) 中定义基本身份验证,它将自动使用防火墙中指定的提供程序。因此,Symfony 使用基本身份验证作为实际登录。集成一个简单的基本身份验证应该没有那么难吧?我误解了什么吗?

我的目标:

  • 两个独立的身份验证(用户之间没有关联)

  • 如果我通过基本身份验证登录,那么我应该能够通过实际登录页面使用用户实体登录。该页面的行为应该与您没有登录并且不使用基本身份验证一样。

我试图整合几个防火墙......

staging/security.yaml

security:

    providers:

        our_users:

            entity: { class: App\Entity\User\User, property: email }


        basic_auth:

            memory:

                users:

                    system: { password: 'testpw', roles: ['ROLE_BASIC_AUTH'] }


    firewalls:

        dev:

            pattern: ^/(_(profiler|wdt)|css|images|js)/

            security: false


        staging:

            provider: basic_auth

            http_basic:

                realm: "My Basic Auth"


        main:

            anonymous: ~


            form_login:

                provider: our_users

                login_path: my_login_path

                csrf_token_generator: security.csrf.token_manager

                default_target_path: homepage


            guard:

                provider: our_users

                authenticators:

                    - App\Security\LoginFormAuthenticator


    access_control:

        - { path: ^/admin, role: ROLE_ADMIN }

        - { path: ^/login$, role: ROLE_BASIC_AUTH }

        - { path: ^/$, role: IS_AUTHENTICATED_REMEMBERED }


我可以使用它通过 Basic Auth 对自己进行身份验证,但我在临时防火墙中。当我现在尝试登录时,它总是失败。我认为发生这种情况是因为此防火墙中的表单未分配给引用用户实体的身份验证器。而且它不会自动将防火墙切换到正确的防火墙。

如果您在页面上使用用户系统,实现基本身份验证的最佳实践是什么?

感谢您的建议!

编辑:

如果有人遇到同样的问题:我在我的案例中发现了问题..看看接受的答案的响应。感谢帮助!


慕码人8056858
浏览 93回答 1
1回答

收到一只叮咚

URL 只能由一个防火墙保护,将使用第一个匹配的防火墙,这就是您遇到冲突的原因。使用安全组件时,防火墙将根据请求匹配器的结果决定是否处理请求:匹配请求的第一个防火墙将处理它。https://symfony.com/doc/current/security/firewall_restriction.html最简单的解决方案可能是在 Web 服务器上配置基本身份验证,例如Apache或nginx。
随时随地看视频慕课网APP
我要回答