[英]Symfony & Guard: “The security token was removed due to an AccountStatusException”
[英]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_authenticator
的getCredentials()
方法基本上如下所示:
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.