параметры вызова Google oauth добавляются несколько раз - PullRequest
0 голосов
/ 17 сентября 2018

Мы успешно используем Google OAuth уже несколько лет, но он неожиданно перестал работать несколько дней назад.Рассматривая это, кажется, что после того, как пользователь нажимает «Разрешить», чтобы предоставить доступ к запрошенной области, Google перенаправляет на нашу страницу обратного вызова (как это всегда было), но теперь параметры кода и области добавляются в URLнесколько раз (пример ниже).Учитывая ограничения длины строки запроса на нашем веб-сервере, теперь возникает ошибка 404.15.

Поскольку мы не вносили последние изменения в код и не обновляли консоль API Google, я не думаю, что мы имеемсделал все, чтобы параметры были добавлены несколько раз к URL обратного вызова.Это проблема с Google?Или я что-то упустил из-за этой проблемы?

Пример URL обратного вызова:

http://example.com/oauth/oauthcallback?code=4/XADj4OhPIwWZRA5TsZMgOkMIfmuBVdQidarK_MhSmkpxWubmprbySMBnY4huJaYATwzf8B798OcHLfD-LdBBtfQ&scope=https://googleapis.com/auth/gmail.readonly&code=4/XADj4OhPIwWZRA5TsZMgOkMIfmuBVdQidarK_MhSmkpxWubmprbySMBnY4huJaYATwzf8B798OcHLfD-LdBBtfQ&scope=https://googleapis.com/auth/gmail.readonly&code=4/XADj4OhPIwWZRA5TsZMgOkMIfmuBVdQidarK_MhSmkpxWubmprbySMBnY4huJaYATwzf8B798OcHLfD-LdBBtfQ&scope=https://googleapis.com/auth/gmail.readonly&code=4/XADj4OhPIwWZRA5TsZMgOkMIfmuBVdQidarK_MhSmkpxWubmprbySMBnY4huJaYATwzf8B798OcHLfD-LdBBtfQ&scope=https://googleapis.com/auth/gmail.readonly&code=4/XADj4OhPIwWZRA5TsZMgOkMIfmuBVdQidarK_MhSmkpxWubmprbySMBnY4huJaYATwzf8B798OcHLfD-LdBBtfQ&scope=https://googleapis.com/auth/gmail.readonly&code=4/XADj4OhPIwWZRA5TsZMgOkMIfmuBVdQidarK_MhSmkpxWubmprbySMBnY4huJaYATwzf8B798OcHLfD-LdBBtfQ&scope=https://googleapis.com/auth/gmail.readonly&code=4/XADj4OhPIwWZRA5TsZMgOkMIfmuBVdQidarK_MhSmkpxWubmprbySMBnY4huJaYATwzf8B798OcHLfD-LdBBtfQ&scope=https://googleapis.com/auth/gmail.readonly&code=4/XADj4OhPIwWZRA5TsZMgOkMIfmuBVdQidarK_MhSmkpxWubmprbySMBnY4huJaYATwzf8B798OcHLfD-LdBBtfQ&scope=https://googleapis.com/auth/gmail.readonly&code=4/XADj4OhPIwWZRA5TsZMgOkMIfmuBVdQidarK_MhSmkpxWubmprbySMBnY4huJaYATwzf8B798OcHLfD-LdBBtfQ&scope=https://googleapis.com/auth/gmail.readonly&code=4/XADj4OhPIwWZRA5TsZMgOkMIfmuBVdQidarK_MhSmkpxWubmprbySMBnY4huJaYATwzf8B798OcHLfD-LdBBtfQ&scope=https://googleapis.com/auth/gmail.readonly&code=4/XADj4OhPIwWZRA5TsZMgOkMIfmuBVdQidarK_MhSmkpxWubmprbySMBnY4huJaYATwzf8B798OcHLfD-LdBBtfQ&scope=https://googleapis.com/auth/gmail.readonly&code=4/XADj4OhPIwWZRA5TsZMgOkMIfmuBVdQidarK_MhSmkpxWubmprbySMBnY4huJaYATwzf8B798OcHLfD-LdBBtfQ&scope=https://googleapis.com/auth/gmail.readonly&code=4/XADj4OhPIwWZRA5TsZMgOkMIfmuBVdQidarK_MhSmkpxWubmprbySMBnY4huJaYATwzf8B798OcHLfD-LdBBtfQ&scope=https://googleapis.com/auth/gmail.readonly&code=4/XADj4OhPIwWZRA5TsZMgOkMIfmuBVdQidarK_MhSmkpxWubmprbySMBnY4huJaYATwzf8B798OcHLfD-LdBBtfQ&scope=https://googleapis.com/auth/gmail.readonly&code=4/XADj4OhPIwWZRA5TsZMgOkMIfmuBVdQidarK_MhSmkpxWubmprbySMBnY4huJaYATwzf8B798OcHLfD-LdBBtfQ&scope=https://googleapis.com/auth/gmail.readonly&code=4/XADj4OhPIwWZRA5TsZMgOkMIfmuBVdQidarK_MhSmkpxWubmprbySMBnY4huJaYATwzf8B798OcHLfD-LdBBtfQ&scope=https://www.googleapis.com/auth/gmail.readonly

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018

Публикация, потому что это может помочь другим. Ответ @ fzebra применялся в моем случае, но ТАКЖЕ моя библиотека аутентификации перенаправляет все параметры запроса, которые провайдер OAuth отправляет моему redirect_uri, на запросы, которые он делает для получения access_token. Из-за этого и из-за того, что я думаю, что у Google есть ошибка разбора, новый параметр scope взрывает запрос. Google отвечает 400 Bad Request и проверяя ответ JSON, вы получаете redirect_uri_mismatch. Я предполагаю, что они видят их собственный scope параметр URL в качестве URI перенаправления и делают запрос недействительным.

Чтобы решить эту проблему, мне нужно было отключить параметр запроса scope из исходящего запроса в Google, поэтому я сделал это с помощью правила перезаписи URL.

    <!-- See /11055580/parametry-vyzova-google-oauth-dobavlyaytsya-neskolko-raz -->
    <rule name="Google Login - Remove scope parameter" stopProcessing="true">
        <match url="google/redirect/url(.*)?$" />
        <conditions trackAllCaptures="true">
            <add input="{QUERY_STRING}" pattern="(.*)(&amp;?scope=.+&amp;?)(.*)" />
        </conditions>
        <action type="Rewrite" url="google/redirect/url?{C:1}{C:3}" appendQueryString="false" />
    </rule>

Это вырезает параметр и значение scope из входящей строки запроса и объединяет эти две части вместе без него. Обратите внимание, что &amp; потому, что это XML, в простом регулярном выражении выражение просто (.*)(&?scope=.+&?)(.*). В некоторых случаях он оставляет трейлинг &.

Вам следует заменить google/redirect/url на путь к вашему URL авторизации (на который Google перенаправляет).

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

Это наконец исправило. Jeez!

0 голосов
/ 18 сентября 2018

Я решил это.В случае, если это кому-то поможет, в период между 12/12/2018 и 14/09/2018 Google начал возвращать дополнительный параметр («область действия») в своем обратном вызове OAuth (в дополнение к единственному другому параметру - «коду»), которыйранее был возвращен в обратном вызове).Значение области действия включало в себя «https://www.googleapis.com", которое вызывало проблему с существующим правилом перезаписи URL на нашем конце, чтобы убрать« www »из нашего URL. Очень общий синтаксис в нашем правиле перезаписи, который просто искал« www ».вызывал цикл перенаправления до 404.15. При назначении правила перезаписи для нашего URL-адреса параметр области игнорируется правилом перезаписи, и цикл перенаправления исключается.

...