2015-02-11 69 views
2

我正在定義一個新控制器,充當JS應用和OAuth服務器之間的代理。代碼如下:通過FOSOAuthServerBundle TokenController使用'forward'

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. 如果我的方法作爲一個整體是正確的與否
+0

如果可以訪問FOS的OAuth2的集裝箱服務,我會建議你通過這條路線去。如果您嘗試將身份驗證添加到js應用程序,則可以直接使用oauth2客戶端 – lcapra 2015-02-11 22:42:04

+0

對不起,我不明白FOS OAuth2的容器服務是什麼,您可以精確一點嗎?至於讓我的JS應用程序直接成爲一個OAuth客戶端,很遺憾是不可能的(如果我理解正確的話),因爲FOSOAuthServerBundle實現只允許與JS不兼容的私有客戶端(一個不想公開客戶端ID和祕密JS代碼...)。 – Silverspur 2015-02-12 00:02:44

回答

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,則您繞過了身份驗證,因此您可能完全跳過了身份驗證。

您可以使用token auth(將用戶重定向到登錄頁面),併爲您提供訪問令牌以獲取更多請求。

這對我幫助很大,而決定的權威性機制類型使用 https://aaronparecki.com/articles/2012/07/29/1/oauth2-simplified