Я пытаюсь использовать Google Sign-In с функцией firebase в соответствии с документацией Google для Вход через Google для серверных приложений, однако сталкиваюсь с ошибкой redirect_uri_mismatch
(в отличие от примеров в этой документации, я использую SDK Node.js от Google).
Общий процесс, которому я следую, заключается в использовании SDK javascript Google для запроса offlineAccessCode()
от пользователя, отправки этого кода доступа на сервер (функция firebase), использования кода доступа для получения токена доступа и токена обновления и сохранения обновления. токен для последующего использования (это процесс, описанный в документации).
Может показаться, что значение термина redirect_uri_mismatch
не требует пояснений, но, как указано в связанной документации, The Authorized redirect URI field does not require a value. Redirect URIs are not used with JavaScript APIs.
Эта строка взята из раздела «Шаг 1. Создайте идентификатор клиента и секрет клиента» и объясняет, как настроить учетные данные клиента OAuth. Это единственный раз в документации, где упоминается URI перенаправления, и нет указаний на то, что URI перенаправления необходим, когда сервер использует код авторизации для получения токена доступа.
Действительно, концепция URI перенаправления не имеет смысла в контексте облачной функции, использующей код доступа, полученный от клиента. Если серверу необходимо предоставить соответствующий redirect_uri
в качестве клиента javascript (который, кажется, нигде не указан), я не уверен, что redirect_uri
использует клиент javascript.
Итак, на этом фоне у кого-нибудь есть идеи, как решить эту redirect_uri_mismatch
ошибку?
Или, в более общем смысле, любые указатели на реализацию этого потока аутентификации (моя облачная функция написана на javascript с использованием гугл нодджс сдк). Мне очень сложно отлаживать эту проблему.
Я понял, что причина, по которой сообщение об ошибке говорит redirect_uri_mismatch
, заключается в том, что я тестировал различные значения как redirect_uri
. Когда я удаляю (необязательный) параметр redirect_uri
из запроса, серверы Google отвечают invalid_request: Missing parameter redirect_uri
. Таким образом, Google дает понять, что это хочет URI перенаправления, даже несмотря на то, что документация, похоже, подразумевает, что это не обязательно для этого потока аутентификации. Более серьезная проблема заключается в том, что в документации не описывается, как настроить URI перенаправления для потока аутентификации в одностраничном приложении.
Ах ХА! Ответ (как указано в этот другой С.О. отвечать) состоит в том, чтобы установить redirect_uri
на "postmessage"
на сервере (функция firebase в моем случае). Я понятия не имею, откуда взялся этот ответ (т.е. я не смог найти его в документах), но он работает.