Symfony 5 ApiKeyAuthenticator 和 SelfValidatingPassport
Posted
技术标签:
【中文标题】Symfony 5 ApiKeyAuthenticator 和 SelfValidatingPassport【英文标题】:Symfony 5 ApiKeyAuthenticator with SelfValidatingPassport 【发布时间】:2021-11-10 10:06:44 【问题描述】:我正在开发一个新的 Symfony 5.3.6 项目,并希望根据新系统实现身份验证,如下所述:
https://symfony.com/doc/current/security/authenticator_manager.html#creating-a-custom-authenticator
我没有任何用户,只是想检查发送的api令牌是否正确,所以在实现此方法时:
public function authenticate(Request $request): PassportInterface
$apiToken = $request->headers->get('X-AUTH-TOKEN');
if (null === $apiToken)
// The token header was empty, authentication fails with HTTP Status Code 401 "Unauthorized"
throw new CustomUserMessageAuthenticationException('No API token provided');
return new SelfValidatingPassport(new UserBadge($apiToken));
检查具体在哪里进行?我是否忘记在某处实现另一个类?
如果我保留代码原样,它会直接进入onAuthenticationFailure
。
我明白,我可以使用属性 $apiToken
实现 Users/UserProvider,然后系统将检查数据库条目是否与请求中的令牌对应。但我没有用户。
在没有用户的情况下应该是可能的,因为在上面的 URL 上,它说:
自我验证护照
如果您不需要检查任何凭据(例如,在使用 API 时 令牌),您可以使用 Symfony\Component\Security\Http\Authenticator\Passport\SelfValidatingPassport。 这个类只需要一个 UserBadge 对象和可选的 Passport 徽章。
但这有点薄。我如何“使用”它?
【问题讨论】:
【参考方案1】:你可以使用下一个验证
return new SelfValidatingPassport(
new UserBadge($apiToken, function() use ($apiToken)
// TODO: here you can implement any check
)
);
【讨论】:
+1 一般的答案。毕竟,我切换到拥有用户,以使其正常工作。如果有人可以发表评论并确认此方法,我很乐意将其标记为答案。或者也许我有另一个项目或一些空闲时间,然后我会自己验证。 对我来说,它完全不可能让它工作,文档操作系统如此混乱且写得不好,它什么也没说。 api 令牌身份验证对我不起作用以上是关于Symfony 5 ApiKeyAuthenticator 和 SelfValidatingPassport的主要内容,如果未能解决你的问题,请参考以下文章
Symfony 5 ApiKeyAuthenticator 和 SelfValidatingPassport
无法使用 Symfony 5 安装 FOSRestBundle
Symfony 5.1 弃用 RouteCollectionBuilder -> RoutingConfigurator
升级到 Symfony 5.3 并更新 flex 配方后出错 (symfony:recipes:install --force)