簡體   English   中英

Symfony中同一防火牆的匿名和經過身份驗證的用戶

[英]Anonymous and authenticated users for same firewall in Symfony

我有兩個用於auth和api的防火牆。 但是我想將它們結合起來並能夠檢查控制器中是否有用戶。

firewalls:
    user:
        pattern:  ^/api/auth
        stateless: true
        anonymous: true
        json_login:
            check_path:               /api/auth/login_check
            success_handler:          lexik_jwt_authentication.handler.authentication_success
            failure_handler:          lexik_jwt_authentication.handler.authentication_failure
            require_previous_session: false

    api:
        pattern:   ^/api
        stateless: true
        guard:
            authenticators:
                - lexik_jwt_authentication.jwt_token_authenticator

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

我想要做的是將防火牆組合成一個防火牆,並允許所有用戶在那里,但是如果JWT過去了,仍然可以用來識別用戶。

可能嗎?

我認為,要實現這一點,您只需要匹配^ / api模式的防火牆並繼續使用保護驗證器即可。 然后,在您的身份驗證器內部,檢查請求的確切路由,然后選擇繼續正常的警衛身份驗證器流程還是使用自定義邏輯來實現json登錄。 但是,即使后衛允許您實現自己的邏輯,這也有點臟。 保持分開的防火牆聽起來更好。

我認為最好保留單獨的防火牆,就像已經提到的那樣,但是如果您絕對需要保持應用程序對所有人開放並檢查用戶是否在控制器中通過了身份驗證,則可以參考symfony的文檔並使用類似的方法:

$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM