Symfony 如何在不在防火墙内使用AuthenticationProvider的情况下添加/激活AuthenticationProvider?
向内核添加Symfony 如何在不在防火墙内使用AuthenticationProvider的情况下添加/激活AuthenticationProvider?,symfony,authentication,fosuserbundle,Symfony,Authentication,Fosuserbundle,向内核添加AuthenticationProvider的正确方法是什么?在security.yml文件中创建一个虚拟条目是可行的,但似乎有点麻烦 说来话长: 我正在为我现有的基于Symfony的web服务创建Amazon Alexa技能 要检查请求是否应被授权,我必须手动从请求中提取AuthToken,并将其传递给AuthenticationManager: public function alexaRequestAction(Request $request, AuthenticationMa
AuthenticationProvider
的正确方法是什么?在security.yml
文件中创建一个虚拟条目是可行的,但似乎有点麻烦
说来话长:
我正在为我现有的基于Symfony的web服务创建Amazon Alexa技能
要检查请求是否应被授权,我必须手动从请求中提取AuthToken
,并将其传递给AuthenticationManager
:
public function alexaRequestAction(Request $request, AuthenticationManagerInterface $authenticationManager) {
...
$accessToken = $this->getAuthTokenFromRequest($request);
if ($accessToken) {
$token = new OAuthToken();
$token->setToken($accessToken);
try {
$authToken = $authenticationManager->authenticate($token);
...
} catchcatch (AuthenticationException $e) {
...
}
} else {
// Request without a linked account...
}
}
此操作失败,出现ProviderNotFoundException
。如果我向Symfony\Component\Security\Core\Authentication\AuthenticationProviderManager
添加一些日志记录以查看哪些提供程序可用,则不包括OAuthProvider
我可以通过在防火墙设置中添加一个虚拟条目来更改此设置:
// security.yml
security:
firewalls:
oauth_dummy:
pattern : ^/someDummyPath
fos_oauth : true
现在提供程序可用,上面的代码也可以工作了。然而,仅仅为了添加提供者而添加虚拟防火墙似乎不是最优雅的解决方案。正确的方法是什么?请仔细阅读Thank@DevDonkey,但本文介绍了如何创建自定义身份验证系统,而问题是如何使用现有的身份验证系统(FOSOAuthServerBundle)。或者答案是“身份验证系统不应手动使用,而只能由防火墙使用?创建自定义系统,从任务中提取令牌并包装现有的OAuth身份验证”?据我所知,如果您想利用Symfony的身份验证配置,您需要通过防火墙条目来实现。或者如果没有,你可以覆盖整个过程,通过一个控制器方法进入,但我不想麻烦。附加防火墙很好。如果您需要在整个系统中使用它,为什么不使用root(
^/
)路径将它添加到防火墙下或任何需要它的地方?@DevDonkey我曾想过“覆盖整个系统”,但这会带来一些其他问题:@DonCallisto我不需要在整个系统中使用它,而只需要在一个控制器中使用它。无法为此路径/控制器添加防火墙,因为fos_oauth
无法识别was Alexa传输令牌。此外,Alexa对授权和未授权请求使用相同的路径/控制器。请仔细阅读Thank@DevDonkey,但本文介绍了如何创建自定义身份验证系统,而问题是如何使用现有身份验证系统(FOSOAuthServerBundle)。或者答案是“身份验证系统不应手动使用,而只能由防火墙使用?创建自定义系统,从任务中提取令牌并包装现有的OAuth身份验证”?据我所知,如果您想利用Symfony的身份验证配置,您需要通过防火墙条目来实现。或者如果没有,你可以覆盖整个过程,通过一个控制器方法进入,但我不想麻烦。附加防火墙很好。如果您需要在整个系统中使用它,为什么不使用root(^/
)路径将它添加到防火墙下或任何需要它的地方?@DevDonkey我曾想过“覆盖整个系统”,但这会带来一些其他问题:@DonCallisto我不需要在整个系统中使用它,而只需要在一个控制器中使用它。无法为此路径/控制器添加防火墙,因为fos_oauth
无法识别was Alexa传输令牌。此外,Alexa对授权和未授权请求使用相同的路径/控制器。