URL-кодирование параметров запроса и URI перенаправления

Безопасно кодируйте значения redirect_uri, URL-адреса обратного вызова и вложенные параметры, чтобы ваш запрос аутентификации или API не прерывался.

В этом руководстве рассматривается практическое кодирование URL-адресов: потоки перенаправления, параметры запроса, значения области и разница между кодированием полного URL-адреса и кодированием одного компонента.

Используйте это, когда
URL-адрес обратного вызова, строка вложенного запроса или значение redirect_uri продолжают отклоняться или усекаться.
Что проверить в первую очередь
Проверьте, закодировали ли вы весь URL-адрес или только компонент параметра. Эта разница обычно объясняет неработающие редиректы.
Распространенная ошибка
Пробелы, знаки плюс, символы и вопросительные знаки часто выглядят в журналах безобидно, но нарушают запросы, когда они копируются в исходном виде.
Примеры рабочих процессов
Закодируйте значение redirect_uri
Вложенные URL-адреса обратного вызова должны быть закодированы как значения параметров, а не вставлены в исходном виде во внешний запрос.
redirect_uri=https%3A%2F%2Fapp.example.com%2Fcallback%3Fnext%3D%252Fsettings
Кодирование строки области
Значения области OAuth часто содержат пробелы, которые для надежной передачи необходимо закодировать в процентах.
scope=read%3Ausers%20write%3Ausers
Обработка значений поиска или электронной почты
Такие символы, как +, @, / и ? являются хорошим сигналом того, что вы кодируете правильный компонент.
email=dev%2Balerts%40example.com
Держите обратный вызов читабельным
Живой инструмент позволяет кодировать или декодировать одно значение за раз, что полезно, когда журналы перенаправления трудно читать.
https://app.example.com/callback?next=/settings
encodeURI против encodeURIComponent

Используйте encodeURI для полного URL-адреса, который вы хотите сохранить структурно. Используйте encodeURIComponent для одного значения параметра, например redirect_uri, состояния или поискового запроса.

  • Большинство ошибок аутентификации и API возникают из-за необходимости encodeURIComponent и случайного сохранения зарезервированных символов.
Кодируйте значение, а не весь запрос вслепую

Подписанные запросы, перенаправления OAuth и вложенные URL-адреса зависят от кодирования правильного компонента на правильном уровне. В случае сомнений сначала изолируйте значение и проверьте его самостоятельно.

  • Перейдите к форматированию JSON, если проблема действительно заключается в теле запроса, а не в строке запроса.