Symfony FOSOAuthServerBundle是否以编程方式获取令牌?

Symfony FOSOAuthServerBundle是否以编程方式获取令牌?,symfony,fosoauthserverbundle,Symfony,Fosoauthserverbundle,使用FosAuthServerBundle和FOSUserBundle的标准端点,我可以通过提供客户端id、客户端密钥、用户和密码组合来检索访问和刷新令牌。响应如下所示: { "accessToken": "YTg2ZTJkNTY2MGM5MGQyNzZjYjkyZWMwYzg1YTZmZTZmOTIyMzAxNDY2MTkwZDU5ODYzZTAzYmIyNDI0YTQ4ZQ", "expiresIn": 3600, "tokenType": "bearer", "refres

使用FosAuthServerBundle和FOSUserBundle的标准端点,我可以通过提供客户端id、客户端密钥、用户和密码组合来检索访问和刷新令牌。响应如下所示:

{
  "accessToken": "YTg2ZTJkNTY2MGM5MGQyNzZjYjkyZWMwYzg1YTZmZTZmOTIyMzAxNDY2MTkwZDU5ODYzZTAzYmIyNDI0YTQ4ZQ",
  "expiresIn": 3600,
  "tokenType": "bearer",
  "refreshToken": "OTU1MGZhNDQ2ODFkZDUzMmQ4Y2FhNTk5OWM0NWFlNDk0YTY0ZDZhOTRjZTUwM2JlYTE3MDkxYzU3ZWY1OGRkYQ"
}
我的问题是,如何通过传递客户端和用户凭据以编程方式检索类似的数据?也就是说,我如何从我的应用程序的另一部分进行相同的调用,而不是通过HTTP慢,而是直接通过捆绑代码快


我相信一定有一种简单的方法可以做到这一点,但到目前为止,我所能找到的最好的方法是这种方法,它并没有真正实现与HTTP调用相同的功能。

我的理解是,您使用的是密码授予类型。这需要应用程序知道用户和密码对才能获得令牌。我建议改为使用client_凭证授权类型

使用FOSOAuthServerBundle,您应该能够在ContainerWare上下文中获得类似的访问令牌

$this->get('fos_oauth_server.server')->grantAccessToken($request)
正如您所看到的,这里需要一个请求对象,但是您可以很容易地伪造这个对象

或者你可以试试

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

其中,$client是OAuth客户端的实例。

以下是如何使用请求对象直接从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();