Я определяю новый контроллер как прокси между приложением 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
Я не знаю:
Я бы пошел с чем-то вроде $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
Других решений пока нет …