2

我正在定义一个新的 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. 我的方法整体是否正确
4

1 回答 1

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,则您正在绕过身份验证,因此您可能完全可以跳过身份验证。

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

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

于 2015-02-12T15:58:21.490 回答