2

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 に答える