Использование ‘forward’ с FOSOAuthServerBundle TokenController

Я определяю новый контроллер как прокси между приложением 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. если мой метод в целом правильный или нет

2

Решение

Я бы пошел с чем-то вроде $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

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]