首页 > 解决方案 > symfony guard 身份验证器没有被调用

问题描述

我正在使用API 端点中的ldaptools-bundlefosuserbundle

我的 security.yaml 看起来像这样

security:
    encoders:
        FOS\UserBundle\Model\UserInterface: bcrypt
        LdapTools\Bundle\LdapToolsBundle\Security\User\LdapUser: plaintext

    role_hierarchy:
        ROLE_ADMIN: ROLE_USER
        ROLE_SUPER_ADMIN: ROLE_ADMIN

    providers:
        chain_provider:
            chain:
                providers: [ldap, fos_userbundle]
        fos_userbundle:
            id: fos_user.user_provider.username_email
        ldap:
            id: ldap_tools.security.user.ldap_user_provider

    firewalls:
        dev:
            pattern:  ^/(_(profiler|wdt)|css|images|js)/
            security: false
        login:
            pattern:  ^/login
            stateless: true
            anonymous: true
            provider: ldap
            json_login:
                check_path: /login
                username_path: username
                password_path: password
                success_handler: lexik_jwt_authentication.handler.authentication_success
                failure_handler: lexik_jwt_authentication.handler.authentication_failure
            guard:
                authenticators:
                    - ldap_tools.security.ldap_guard_authenticator
        main:
            pattern:   ^/
            provider: fos_userbundle
            stateless: true
            anonymous: true
            guard:
                authenticators:
                    - lexik_jwt_authentication.jwt_token_authenticator

    access_control:
        - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/, roles: ROLE_USER }

问题是 ldap 保护身份验证器没有检查凭据。

当我将提供程序更改为 ldap 而不是 fosuser 时,我在 BasePasswordEncoder 类中收到 500 错误代码,如果我使用 chain_provider 也会发生这种情况

警告:hash_equals():期望 known_string 是一个字符串,给定 null

有没有错过配置之类的?工作流程应如下所示:

注意:工作流在没有 ldap 的情况下工作,并且生成了令牌。

提前致谢!

标签: symfonyldapsymfony4symfony-guardsymfony-ldap

解决方案


推荐阅读