Skip to content

В текущей версии SDK v5.199.99 не работает получение пользовательского access_token из-за ошибки в передаче code_verifier #122

@shum16

Description

@shum16

При попытке получить ключ методом \VK\OAuth\User\User::getTokens сервер VK возвращает ошибку:
Uncaught VK\Exceptions\VKOAuthException: verifier is missing or invalid. OAuth error invalid_request.
Все сделано по Authorization Flow и несколько раз проверено. Также пробовал вложенный пример vendor/vkcom/vk-php-sdk/examples/oauth/user.php - та же ошибка

Полдня мучений, логирований и проч., и выяснилось, что при передаче code_verifier в обмен на токен, он зачем-то опять хэшируется, практически также как при генерации для ссылки авторизации при получении code_challenge.
После явной подмены code_verifier в параметрах запроса на нехэшированную версию $codeVerifier, access token удалось таки получить!

Ошибка в конструкторе \VK\OAuth\User\DTO\TokensParams::__construct вот здесь:

public function __construct(int $client_id, string $code_verifier, string $redirect_uri, string $code, string $device_id)
{
...
$this->code_verifier = rtrim(strtr(base64_encode($code_verifier), '+/', '-_'), '=');
...
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions