繁体   English   中英

与FOSOAuthServerBundle TokenController一起使用“转发”

[英]Using 'forward' with FOSOAuthServerBundle TokenController

我正在定义一个新的Controller来充当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

我不知道:

  1. 在哪里可以获取此服务器实例
  2. 我如何将其传递给TokenController
  3. 我的方法总体上是否正确

我会使用类似$this->get('fos_oauth_server.controller.token')->tokenAction($request) (未尝试过,但应该可以使用)

有关服务定义,请参见https://github.com/FriendsOfSymfony/FOSOAuthServerBundle/blob/master/Resources/config/oauth.xml ;有关别名,请参见DependencyInjection文件夹。 Xdebug是您的朋友。

如果在此代理中预先设置了client_secret / client_id,则绕过了身份验证,因此可能根本可以跳过身份验证。

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

这在决定使用https://aaronparecki.com/articles/2012/07/29/1/oauth2-simplified使用哪种身份验证机制时给了我很大帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM