Google OAuth回调多次追加参数 [英] google oauth callback appending parameters multiple times

查看:24
本文介绍了Google OAuth回调多次追加参数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我们已经成功使用Google OAuth多年了,但它在几天前突然停止工作。在研究这一点时,似乎在用户单击"Allow"以授予对请求的范围的访问权限后,Google将重定向到我们的回调页面(一如既往),但现在代码和范围参数被多次附加到URL中(如下例所示)。给定Web服务器上的查询字符串长度限制,现在会引发404.15的错误。

由于我们最近没有进行任何代码更改,也没有在Google API控制台中进行任何更新,我认为我们没有做任何事情来导致参数被多次追加到回调URL。这是谷歌的问题吗?或者我是否遗漏了可能导致此问题的某些内容?

示例回调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

推荐答案

张贴,因为这可能会帮助他人。@fzebra的答案适用于我的情况,但我的身份验证库也将OAuth提供程序发送给我的redirect_uri的所有查询参数转发给它检索access_token的请求。正因为如此,也因为我认为Google有一个解析错误,所以新的scope参数破坏了请求。Google使用400 Bad Request进行响应,检查JSON响应,得到redirect_uri_mismatch。我的猜测是他们将他们自己的scopeURL参数视为重定向URI,并使请求无效。

要解决此问题,我需要将scope查询参数从Google的传出请求中删除,因此我通过URL重写规则完成了此操作。

    <!-- See https://stackoverflow.com/questions/52372359/google-oauth-callback-appending-parameters-multiple-times -->
    <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)。

您可以在应用层代码中执行此操作,但URL重写不会添加额外的服务器请求👍

这最终解决了它。天哪!

这篇关于Google OAuth回调多次追加参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆