匿名令牌即使登录的公共页面(Anonymous token even if logged in in

2019-10-18 05:29发布

我有一些麻烦的设置我的安全。

我想要一个页面都通过匿名和登录的成员访问。 我想让它显示根据不同的情况(事实上,我想还是可以登录成为会员时,我就可以去)不同的内容。

我想给公众访问的页面是^ / profile文件。

我把我的security.yml这样的:

jms_security_extra:
secure_all_services: false
expressions: true

security:
    encoders:
    Symfony\Component\Security\Core\User\User: plaintext
    FOS\UserBundle\Model\UserInterface: sha512

    role_hierarchy:
        ROLE_ADMIN:       ROLE_USER
        ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

    providers:
        fos_userbundle:
            id: fos_user.user_provider.username_email

    firewalls:
        dev:
            pattern:  ^/(_(profiler|wdt)|css|images|js)/
            security: false

   # Firewall pour les pages de connexion, inscription, et récupération de mot de passe
        login:
           pattern: ^/(login$|register|resetting) # Les adresses de ces pages sont login, register et resetting
            anonymous: true                        # On autorise bien évidemment les anonymes sur ces pages # Firewall principal pour le reste de notre site
        public:
           pattern:            ^/profile
           anonymous:          true
           homepage:
           pattern: ^/$
               anonymous: true
               main:
                  pattern: ^/                           # ^/ = tout ce qui commence par / = tout notre site
        form_login:                            # On définit notre méthode d'authentification
            provider: fos_userbundle           # On lie l'authentification au provider définit plus haut
            remember_me: true                  # On active la possibilité du "Se souvenir de moi" (désactivé par défaut) 
        remember_me:
            key: %secret%                      # On définit la clé pour le remember_me (%secret% est un parametre de parameters.yml)
        anonymous: false                       # On autorise les utilisateurs anonymes (non identifiés)
        logout: true                           # On autorise la déconnexion manuelle (désactivé par défaut)
        #anonymous: ~
        #http_basic:
        #    realm: "Secured Demo Area"          

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

我的问题是,当我登录,我访问该页面时,它就像我不能登录。(我有我的登录按钮),因为防火墙给我一个匿名令牌。

谢谢你的帮助。 斯卡夫

Answer 1:

在认证常见陷阱:

多重防火墙不共享安全上下文
如果您在使用多重防火墙,你对一个防火墙认证,你不会对任何其他防火墙自动验证。 不同的防火墙就像不同的安全系统。 要做到这一点,你必须明确地指定不同的防火墙相同的防火墙上下文。 但通常对于大多数应用,有一个主要的防火墙是不够的。

所以把所有的下一个主要的防火墙和使用ACL作为FOSUSerBundle安装步骤4 。

jms_security_extra:
secure_all_services: false
expressions: true

security:
    encoders:
    Symfony\Component\Security\Core\User\User: plaintext
    FOS\UserBundle\Model\UserInterface: sha512

    role_hierarchy:
        ROLE_ADMIN:       ROLE_USER
        ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

    providers:
        fos_userbundle:
            id: fos_user.user_provider.username_email

    firewalls:
        dev:
            pattern:  ^/(_(profiler|wdt)|css|images|js)/
            security: false

        main:
            pattern: ^/
            form_login:
                provider: fos_userbundle
                remember_me: true
            logout:       true
            anonymous:    true
            remember_me:
                key: %secret%          

   access_control:
    - { path: ^/$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/login$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/register, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/resetting, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/profile, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/, roles: ROLE_USER }


Answer 2:

IMO您还没有完全正确插入的文件,所以我不能肯定地说。 但是,你可能有2防火墙一个网址。 它的主要防火墙

main: 
    pattern: ^/ 

和公共防火墙

public:
    pattern: ^/profile

尝试仅指定一个防火墙。

引用自官方documenation :

如果您使用多个防火墙多重防火墙不共享安全上下文,你对一个防火墙认证,你不会对任何其他防火墙自动验证。 不同的防火墙就像不同的安全系统。 要做到这一点,你必须明确地指定不同的防火墙相同的防火墙上下文。 但通常对于大多数应用,有一个主要的防火墙是不够的。



文章来源: Anonymous token even if logged in in public pages