Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony 如何在不在防火墙内使用AuthenticationProvider的情况下添加/激活AuthenticationProvider?_Symfony_Authentication_Fosuserbundle - Fatal编程技术网

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对授权和未授权请求使用相同的路径/控制器。