Как получить вызов PKCE при работе с API Asana

Я пытаюсь подключиться к API Asana с помощью OAuth. У меня все остальное работает нормально, но когда я пытаюсь использовать PKCE, он не работает.

Сначала я создаю верификатор кода. После некоторого поиска в Google у меня есть вот такой код. $code_verifier = rtrim(strtr(base64_encode(random_bytes(64)), '+/', '-_'), '='); Я отправляю это на биржу токенов. Затем я хеширую это, кодирую в base64url и передаю на запрос авторизации из браузера.

$hashed = hash('sha256', $code_verifier, true);
$code_challenge = rtrim(strtr(base64_encode($hashed), '+/', '-_'), '=');
 $url = $asana_client->dispatcher->oauthClient->getAuthenticationUrl(
                OAuthDispatcher::$AUTHORIZATION_ENDPOINT,
                $asana_client_redirect_url,
                array(
                    'state' => $state,
                    'code_challenge' => $code_challenge,
                    'code_challenge_method' => 'S256'
                )
            );
$result = $asana_client->dispatcher->oauthClient->getAccessToken(
                    OAuthDispatcher::$TOKEN_ENDPOINT,
                    'authorization_code',
                    array(
                        'code' => $_GET['code'],
                        'redirect_uri' => $asana_client_redirect_url,
                        'code_verifier' => $current_verifier
                    )
                );

Но я получаю обратно ошибку 400 «неверный грант» с описанием «PKCE code_verifier не соответствует запросу сохраненного кода».

Как ни странно, если я не отправляю верификатор кода в точку обмена токенов, он работает. Так и должно быть? Мне это кажется странным, но в то же время это довольно большая ошибка, если так не должно быть.

Я делаю что-то неправильно? Все мои поиски в Google и моя собственная двойная проверка создают впечатление, что это то, что я должен делать... любая помощь будет оценена по достоинству.

Откуда берется $current_verifier?

CBroe 13.05.2024 11:09

@cbroe — это то же самое, что и $code_verifier в первой строке кода, которой я поделился. как только пользователь нажимает мою кнопку для аутентификации, он перезагружает страницу, создавая новый $code_verifier. Чтобы отправить на биржу токенов правильный $code_verifier вместо только что созданного, мне нужно сохранить его в другом месте, а затем получить. Отсюда и новая переменная. Мне нужно сделать то же самое с состоянием, и это работает. Когда я отлаживал это, он также отправлял правильный код $code_verifier, так что проблема не в этом. Извините, я не ясно выразился в вопросе

Eitan 13.05.2024 15:46
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
2
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Для всех, кто может найти этот вопрос и найти это полезным... Кажется, CBroe был на правильном пути. Я сохранял верификатор кода для отправки на биржу токенов не в том месте. так что он отправил не тот. теперь все работает

Другие вопросы по теме