Я использую клиент league / oauth с жужжанием в Slim3 WebApp, работающем с Microsoft Graph ... и я не могу успешно запросить новый токен с помощью данного токена обновления ...
это мой контейнер для league / oauth-client:
$container['oauthprovider'] = function ()
{
$provider = new \League\OAuth2\Client\Provider\GenericProvider(
[
'clientId' => getenv('ENV_CLIENT_ID'),
'clientSecret' => getenv('ENV_CLIENT_SECRET'),
'redirectUri' => getenv('ENV_REDIRECT_URL'),
'urlAuthorize' => getenv('ENV_AUTHORIZE_URL'),
'urlAccessToken' => getenv('ENV_URL_ACCESS_TOKEN'),
'urlResourceOwnerDetails' => '',
'scopes' => 'offline_access user.read people.read user.read.all openid mail.send'
]
);
return $provider;
};
Прекрасно работает - в моем Slim3-Route после перенаправления я получил все токены, refresh_token и т. Д.
$provider = $this -> oauthprovider;
$CODE = filter_var($_GET['code'], FILTER_SANITIZE_FULL_SPECIAL_CHARS);
$accessToken = $provider -> getAccessToken('authorization_code',
['code' => $CODE]
);
...
$existingAccessToken = $accessToken -> getToken();
$refreshToken = $accessToken -> getRefreshToken();
$expiresIn = $accessToken -> getExpires();
$expired = ($accessToken -> hasExpired() ? true : false);
$client = $this -> guzzzle;
...
И если я попытаюсь обновить свой токен в этот момент - в том же Slim3-маршруте - он будет работать нормально:
$newAccessToken = $provider -> getAccessToken('refresh_token', [
'refresh_token' => $accessToken -> getRefreshToken(),
'grant_type' => 'refresh_token'
]);
Но это не моя цель - мне нужно обновить токен, достигнув истекшего срока жизни - 1 час - в другом Slim3-Route:
$accessToken = unserialize($session -> get('serialized_token'));
$refreshToken = unserialize($session -> get('serialized_refresh_token'));
$code = $session -> get('code');
$provider = $this -> oauthprovider;
$client = $this -> guzzzle;
...
$req = $client -> request('POST',
'https://login.windows.net/common/oauth2/token', [
'form_params' => [
'accept' => 'application/json',
'grant_type'=> 'refresh_token',
'client_id' => getenv('ENV_CLIENT_ID'),
'client_secret' => getenv('ENV_CLIENT_SECRET'),
'refresh_token' => (string) $refreshToken,
'redirect_uri' => getenv('ENV_REDIRECT_URL')
]
]);
Ответ:
Ошибка клиента:
POST https://login.windows.net/common/oauth2/token
привела к ответу400 Bad Request
: {"error": "invalid_grant", "error_description": "AADSTS70000: сбой анализатора данных передачи: токен обновления искажен (усечен ...)
Токен обновления точно такой же, как и тот, что я получил в моем первоначальном запросе.
Любой, кто сталкивался с oauth-client / guzzle / Microsoft Graph - Что / Где моя ошибка?