3

好的,我想我需要手握..

这个问题是上一个问题的后续: Symfony2 img/LdapBundle Bad credentials error

我已经把它分开了,因为它是一个不同的问题。我遇到了与 security.yml 文件相关的两个不同问题,如下所述。

我有我的security.yml:

security:
    firewalls:
        login_firewall:
            pattern:    ^/login$
            anonymous:  ~
            imag_ldap:
                check_path: login_check
                login_path: login
                csrf_provider: form.csrf_provider
                intention: authenticate
                provider: ldap
            logout:
                path:           /logout
                target:         /
        restricted_area:
            pattern:          ^/
            #anonymous:        ~ 
    providers:
        ldap:
           id: imag_ldap.security.user.provider

    encoders:
        IMAG\LdapBundle\User\LdapUser: plaintext

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

但我收到以下错误: LogicException: No authentication listener registered for firewall "restricted_area".

所以我尝试了以下方法:

security:
    firewalls:
        login_firewall:
            pattern:    ^/login$
            anonymous:  ~
            imag_ldap:
                check_path: login_check
                login_path: login
                csrf_provider: form.csrf_provider
                intention: authenticate
                provider: ldap
            logout:
                path:           /logout
                target:         /
        restricted_area:
            pattern:          ^/
            #anonymous:        ~ 
            imag_ldap:
                check_path: login_check
                login_path: login
                csrf_provider: form.csrf_provider
                intention: authenticate
                provider: ldap
            logout:
                path:           /logout
                target:         /

但这会导致重定向循环。

谁能告诉我如何让它工作?我正在尝试使用https://github.com/BorisMorel/LdapBundle ldap 包对用户进行身份验证。

4

1 回答 1

2

根据文档https://github.com/BorisMorel/LdapBundle#configure-securityyml,您应该有一个防火墙,pattern: ^/其中也存在登录名。

security:
    firewalls:
        restricted_area:
            pattern:    ^/
            anonymous:  ~
            imag_ldap:
                check_path: login_check
                login_path: login
                csrf_provider: form.csrf_provider
                intention: authenticate
                provider: ldap
            logout:
                path:           /logout
                target:         /
    providers:
        ldap:
           id: imag_ldap.security.user.provider

    encoders:
        IMAG\LdapBundle\User\LdapUser: plaintext

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

不需要身份验证的站点必须包含在acces_control角色IS_AUTHENTICATED_ANONYMOUSLY下。这也适用于 dev-environment 中的分析器和工具栏(实际上对于 FOSUserBundle,但我认为这对于 LdapBundle 也很重要)。是的,我知道 symfony 文档说要专门为^/login$.

    - { path: ^/_wdt, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/_profiler, role: IS_AUTHENTICATED_ANONYMOUSLY }

编辑:不要忘记从包中导入路由定义而不是自己定义它们。见https://github.com/BorisMorel/LdapBundle#import-routing

于 2013-04-24T09:59:16.717 回答