2016-04-25 3 views
0

Используя стандартную конечную точку для FOSOAuthServerBundle (с помощью FOSUserBundle), я могу получить токен доступа и обновления, предоставив комбинацию client_id, client_secret, пользователя и пароля. Ответ выглядит следующим образом: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 вы должны быть в состоянии получить маркер доступа с чем-то вроде (в контексте ContainerAware)

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

Здесь, как вы можете видеть, требуется объект запроса, но вы можете подделать этот объект легко

В альтернативе можно попробовать

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

Где $ клиент является экземпляром вас OAuth клиента.

 Смежные вопросы

  • Нет связанных вопросов^_^