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