2016-04-25 4 views
0

FOSOAuthServerBundleの標準エンドポイント(FOSUserBundleを使用)を使用して、client_id、client_secret、user、およびpasswordの組み合わせを提供することで、アクセスとリフレッシュトークンを取得できます。応答は次のようになります。symfony FOSOAuthServerBundleはプログラムでトークンを取得しますか?

{ 
    "accessToken": "YTg2ZTJkNTY2MGM5MGQyNzZjYjkyZWMwYzg1YTZmZTZmOTIyMzAxNDY2MTkwZDU5ODYzZTAzYmIyNDI0YTQ4ZQ", 
    "expiresIn": 3600, 
    "tokenType": "bearer", 
    "refreshToken": "OTU1MGZhNDQ2ODFkZDUzMmQ4Y2FhNTk5OWM0NWFlNDk0YTY0ZDZhOTRjZTUwM2JlYTE3MDkxYzU3ZWY1OGRkYQ" 
} 

私の質問は、クライアントとユーザーの資格情報を渡してプログラムで同様のデータを取得するにはどうすればよいですか。私。私のアプリケーションの別の部分からHTTP(遅い)を経由するのではなく、むしろ直接バンドルコード(高速)経由で同じ呼び出しを行うことができますか?

私はこれを行う簡単な方法が必要であると確信していますが、これまでに見つけた最高のものはhttps://github.com/FriendsOfSymfony/FOSOAuthServerBundle/issues/347です。これは実際にHTTP呼び出しと同じことを達成しません。

答えて

3

を使用すると、リクエストオブジェクトを使用してfos_oauth_server.serverサービスから直接、同じ応答を得ることができる方法である。

$grantRequest = new Request(array(
     'client_id' => $clientId, 
     'client_secret' => $clientSecret, 
     'grant_type' => 'password', 
     'username' => $username, 
     'password' => $password 
    )); 

$tokenResponse = $this->get('fos_oauth_server.server')->grantAccessToken($grantRequest); 

$token = $tokenResponse->getContent(); 
0

パスワード認可タイプを使用していることを理解しています。これには、アプリケーションがトークンを取得するためのユーザーとパスワードのペアを知っている必要があります。代わりに、client_credentials許可タイプを使用することをお勧めします。 FOSOAuthServerBundleを使用して

あなたはRequestオブジェクトが必要とされて見ることができるよう

$this->get('fos_oauth_server.server')->grantAccessToken($request) 

ここで(ContainerAwareコンテキスト内)のようなものとのアクセストークンを取得することができるはずですが、あなたは簡単にこのオブジェクトを偽造することができます$クライアントがあなたのOAuthクライアントのインスタンスである場合

代替では、

$this->get('fos_oauth_server.server')->createAccessToken($client, null) 

を試みることができます。ここで