簡體   English   中英

Symfony安全-跳過防護

[英]Symfony security - skip guard

我正在嘗試使用Symfony的(2.8.24)保護機制來創建混合的api令牌/表單登錄安全性。

我的security.yml看起來像這樣:

security:

    acl:
        connection: default

    providers:
        jwt:
            id: app.jwt_user_provider

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

        main:
            pattern: ^/
            guard:
                entry_point: app.jwt_authenticator
                authenticators:
                    - app.jwt_authenticator
                    - app.authenticator.form_login
            provider: jwt

    access_control:
        - { path: ^/general/info, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/, role: IS_AUTHENTICATED_FULLY }

因此,我有一個具有兩個配置的身份驗證器的main防火牆。 入口點是app.jwt_authenticator ,回app.authenticator.form_login

我想要這樣,以便在不存在令牌的app.jwt_authenticator下跳過app.jwt_authenticator

app.jwt_authenticatorgetCredentials()方法基本上如下所示:

public function getCredentials(Request $request): ?string
{
    $tokenString = $request->headers->get('Authorization');
    if (!$tokenString) {
        $this->logger->warn('No authorization header');

        return null;
    }

    return $tokenString;
}

因此,如果沒有Authorization標頭,則返回null

根據Symfony的文檔:

從請求中獲取身份驗證憑據,並將其作為任何類型返回(例如,關聯數組)。 如果返回null,將跳過身份驗證。

因此,我希望在沒有Authorization標頭時會跳過此身份驗證器,但不幸的是,情況並非如此。

即使getCredentials()返回null (並且我已經證實確實如此),也會調用start()方法,而不是跳過此身份驗證器並繼續進行下一個驗證。

我的配置不正確嗎? 我是否誤解了機制?
我需要做什么來實現這種混合動力?

原來的竅門是將入口點更改為app.authenticator.form_login

暫無
暫無

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

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