簡體   English   中英

Symfony 多重保護身份驗證不記名令牌在登錄時無法重定向

[英]Symfony Multiple guard Auth bearer token won't work redirecting in login

我正在努力使多重保護身份驗證在我的 preprod 服務器上工作。

我已經在一個項目上設置了多重保護驗證器。 一個身份驗證器用於標准形式的“登錄名,密碼”,第二個用於通過使用承載令牌的請求進行身份驗證。 我遵循了這里的文檔: https : //symfony.com/index.php/doc/4.4/security/multiple_guard_authenticators.html

在本地 symfony 服務器上一切正常。 如果我像這樣卷曲:

curl --location --request GET 'http://127.0.0.1:8000/' \
--header 'Authorization: Bearer 867504f2ff8e03672db2a5aee8f04f8bc17d60f62226d7c97aadb34012599c528f0047959f5ee22d251b3ca0c884bbf659e76a2b668fa9d2608b1fe8' \
--header 'Cookie: PHPSESSID=hd1ea3imfa77fmo5nsuheolmu2'

我很好地驗證並重定向到索引。 (或失敗響應:令牌過期左右......)但在我的預生產服務器上,它只是不工作。 沒有啟動防護,我會自動 302 重定向到 /login(登錄表單)

這是我的 security.yaml

security:
    providers:
       our_db_provider:
            entity:
                class: App\Entity\User
                property: apikey
    encoders:
        custom_sodium:
            id: 'encoder_service'

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

        main:
            anonymous: ~
            http_basic: ~
            form_login:
               login_path: login
               check_path: login
            logout:
               path:       logout
               target:     login
            logout_on_user_change: true


            guard:
                authenticators:
                    - App\Security\ApiTokenAuthenticator
                    - App\Security\LoginAuthAuthenticator

                entry_point: App\Security\LoginFormAuthenticator


    # Easy way to control access for large sections of your site
    # Note: Only the *first* access control that matches will be used
    access_control:
        - { path: ^/provider, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/action/createproposition, roles: ROLE_USER }
        - { path: ^/admin, roles: ROLE_ADMIN }
        - { path: ^/api/, roles: ROLE_USER }
        - { path: ^/login$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/, roles: ROLE_USER }



    role_hierarchy:
        ROLE_ADMIN: [ROLE_USER]

我嘗試了很多事情,比如試圖用獨白記錄 Auth 守衛的使用

在本地服務器上,我可以看到 symfony 調用驗證器以找出要使用的驗證器,並訪問正確的驗證器。 在我的預生產服務器上,我沒有彈出誰的日志。 所以看起來沒有使用守衛,它只是重定向到 /login 因為 /^ 是 ROLE_USER

我也懷疑 .htaccess conf 會導致問題,但我真的不知道如何解決它..

親切的,Naqued

經過一番掙扎,我發現了這個問題,這個線程對我有很大幫助:

PHP POST 請求中缺少授權標頭

我發現標題中的授權密鑰丟失(主機服務器上的記錄器)

問題是在本地服務器上,沒有 .htaccess 在帶有 apache2 的服務器上,在 .htaccess

有rewriteEngine On 所以apache重寫了header,不要在請求的header里寫授權Key

解決方案:在您的 .htaccess 中放置

RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]

這項工作完美:)

親切的,Naqued

暫無
暫無

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

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