我正在使用API 端点中的ldaptools-bundle、fosuserbundle。
我的 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 服务器进行身份验证
- 用户被正确加载,然后 lexik 负责生成令牌
注意:工作流在没有 ldap 的情况下工作,并且生成了令牌。
提前致谢!