Может ли строка запроса ответа Google OAuth содержать не закодированные символы? - PullRequest
0 голосов
/ 29 ноября 2018

Я только что столкнулся с проблемой, когда Grant, промежуточное программное обеспечение OAuth, иногда выдавало ошибку, перенаправляя обратно с конечной точки oauth Google на конечную точку промежуточного программного обеспечения, хотя аутентификация прошла успешно.

После некоторого исследования я понял, что если в браузере нет активной сессии Google (не авторизованной на google.com), строка запроса URL-адреса перенаправления правильно закодирована, и все работает нормально.

http://localhost:1337/connect/google/callback?code=4%2FpAD2TUmE0hgckmSwkxxx&scope=openid%20email%20https://www.googleapis.com/auth/userinfo.email%20https://www.googleapis.com/auth/plus.me

Но если в систему уже вошел пользователь, параметр code строки запроса не закодирован, что приводит к выдаче malformed_auth_tokenошибка в моем промежуточном ПО oauth.

http://localhost:1337/connect/google/callback?code=4/pAD2TUmE0hgckmSwkxxx&scope=openid%20email%20https://www.googleapis.com/auth/userinfo.email%20https://www.googleapis.com/auth/plus.me

Я провел дополнительное тестирование с разными учетными записями, и каждый токен кода, возвращаемый конечной точкой Google, содержал косую черту в качестве 2-го символа.

Итак, я хотел бы знать, если Google содержит ошибки и неправильно возвращает незашифрованные параметры, или если промежуточное ПО oauth должно обрабатывать оба случая, зашифрованные и незашифрованные параметры?

1 Ответ

0 голосов
/ 29 ноября 2018

У Google нет ошибки.

Можно использовать символы слеша в параметрах запроса.Косые черты в параметрах запроса не нужно кодировать.Apache имеет директиву, которую необходимо включить для поддержки параметров запроса с закодированными символами косой черты ( AllowEncodedSlashes ).Ваш бэкэнд должен будет справиться с этой ситуацией.

Однако я нахожу ваш пример странным, когда Google иногда кодирует символы косой черты в параметре кода.Я знаю, что в Google OAuth 2.0 иногда параметры code должны копироваться вручную в поле ввода для завершения потока OAuth.В этом случае я всегда вижу символ косой черты (не закодированный).Это для redirect_uri, являющегося redirect_uri=urn:ietf:wg:oauth:2.0:oob

...