0

FOSOAuthServerBundle の標準エンドポイント (FOSUserBundle を使用) を使用して、client_id、client_secret、ユーザー、パスワードの組み合わせを提供することで、アクセス トークンとリフレッシュ トークンを取得できます。応答は次のようになります。

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

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

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

4

2 に答える 2

6

以下は、リクエスト オブジェクトを使用して 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();
于 2016-10-19T14:16:46.680 に答える
1

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

FOSOAuthServerBundle を使用すると、(ContainerAware コンテキストで) 次のようなものでアクセス トークンを取得できるはずです。

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

ここでわかるように、Request オブジェクトが必要ですが、このオブジェクトは簡単に偽造できます。

別の方法として、試すことができます

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

$client は OAuth クライアントのインスタンスです。

于 2016-04-26T10:10:33.090 に答える