繁体   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