Php 使用';前进';使用FOSOAuthServerBundle令牌控制器

Php 使用';前进';使用FOSOAuthServerBundle令牌控制器,php,symfony,fosoauthserverbundle,Php,Symfony,Fosoauthserverbundle,我正在定义一个新的控制器,作为JS应用程序和OAuth服务器之间的代理。代码如下: namespace Acme\SecurityBundle\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Symfony\Component\HttpFoundation\Request; class ProxyController extends Controller { public functi

我正在定义一个新的控制器,作为JS应用程序和OAuth服务器之间的代理。代码如下:

namespace Acme\SecurityBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;

class ProxyController extends Controller
{
    public function forwardTokenRequestAction(Request $request)
    {
        if( ! $request->isXmlHttpRequest() )
        {
            throw WhateverException();
        }

        $request->request->add( array(
            'client_id'=>'...',
            'client_secret'=>'...'
        ));
        return $this->forward('FOSOAuthServerBundle:Token:token');

    }
}
但是我得到了以下错误,因为我要转发到的TokenController有一个构造函数希望OAuth服务器作为参数:

Catchable Fatal Error: Argument 1 passed to FOS\\OAuthServerBundle\\Controller\\TokenController::__construct() must be an instance of OAuth2\\OAuth2, none given
我不知道:

  • 在那里我可以得到这个服务器实例
  • 如何将其传递给TokenController
  • 我的方法整体正确与否

  • 我会使用类似于
    $this->get('fos\u oauth\u server.controller.token')->tokenAction($request)
    (未尝试但应有效)

    有关服务定义,请参阅;有关别名,请参阅DependencyInjection文件夹中的。Xdebug是你的朋友

    如果在这个代理中您预先设置了client\u secret/client\u id,那么您就绕过了身份验证,因此您可能完全可以跳过身份验证

    您可以使用tokenauth(它将用户重定向到登录页面)并为进一步请求返回访问令牌

    这对我决定使用哪种类型的身份验证机制有很大帮助

    如果您可以使用FOS OAuth2的集装箱服务,我建议您选择该路线。如果您试图将auth添加到js应用程序中,您可以直接使用oauth2客户端。很抱歉,我不明白什么是“FOS oauth2的容器服务”,您能精确一点吗?至于让我的JS应用程序直接成为OAuth客户端,不幸的是这是不可能的(如果我理解正确的话),因为FOSOAuthServerBundle实现只允许与JS不兼容的私有客户端(不希望在JS代码中发布客户端id和机密…)。