Публикация, потому что это может помочь другим. Ответ @ 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="(.*)(&?scope=.+&?)(.*)" />
</conditions>
<action type="Rewrite" url="google/redirect/url?{C:1}{C:3}" appendQueryString="false" />
</rule>
Это вырезает параметр и значение scope
из входящей строки запроса и объединяет эти две части вместе без него. Обратите внимание, что &
потому, что это XML, в простом регулярном выражении выражение просто (.*)(&?scope=.+&?)(.*)
. В некоторых случаях он оставляет трейлинг &
.
Вам следует заменить google/redirect/url
на путь к вашему URL авторизации (на который Google перенаправляет).
Вы можете сделать это в коде прикладного уровня, но перезапись URL не добавляет дополнительного запроса к серверу.
Это наконец исправило. Jeez!