【问题标题】:Google Authorization: Error 400: redirect_url_mismatchGoogle 授权:错误 400:redirect_url_mismatch
【发布时间】:2020-09-05 14:27:21
【问题描述】:

我正在使用我的公司域将任意数量的谷歌表格连接到 python 脚本以抓取数据并创建另一个电子表格。该公司不允许将 google 表格直接共享到他们的 gcp 环境中。

所以我走 Oauth 的路线来完成这个。我在堆栈上找到了下面的代码(请原谅我丢失了链接)并根据我的需要对其进行了调整。

问题是我无法通过身份验证,因为我不断收到错误 400:redirect_url_mismatch - 请求中的重定向 URl http://localhost:8080/ 与授权的不匹配。

授权的 url 是:`http://localhost:8080',这与我在代码中进行的调用相同(同样的 url 在 javascript 源中也被授权)。

我认为问题是在 gcp 环境的授权 URls 中未捕获尾随 /,但该团队告诉我不支持尾随 /(URl 不会保存,因为/ 所以省略了)。

我花了一整天的时间来解决这个问题,但不确定是什么问题或如何解决。

from oauth2client.tools import run_flow, argparser
from oauth2client.file import Storage
rscope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive']
CLIENT_ID = 'MY CLIENT ID'
CLIENT_SECRET = 'MY CLIENT SECRET'
flow = OAuth2WebServerFlow(client_id=CLIENT_ID,
                           client_secret=CLIENT_SECRET,
                           scope=rscope,
                           redirect_url='http://localhost:8080')
storage = Storage('mycredentials.csv')
credentials = run_flow(flow, storage, argparser.parse_args([]))
import requests
import gspread, ast
from oauth2client.client import AccessTokenCredentials
data = {
    'refresh_token' : credentials.refresh_token,
    'client_id' : credentials.client_id,
    'client_secret' : credentials.client_secret,
    'grant_type' : 'refresh_token',
}
r = requests.post('https://accounts.google.com/o/oauth2/token', data = data)
try :
    credentials.access_token = ast.literal_eval(r.text)['access_token']
except Exception: 
    pass;
gc = gspread.authorize(credentials)

我哪里出错了?

【问题讨论】:

  • 只是为了清楚;当您说 authorized URL 时,您是在谈论 OAuth 同意屏幕中的授权域,还是在创建客户端凭据时设置的重定向 URI?
  • 感谢您提出澄清问题。我指的是 OAuth 同意屏幕中的授权域。

标签: python-3.x google-sheets google-cloud-platform oauth-2.0


【解决方案1】:

答案:

您需要在 GCP 中将 https://localhost:8080 设置为您的重定向 URL。

更多信息:

当您在 GCP 中设置客户端凭据时,您需要为凭据设置重定向 URL。这是您的客户在授予授权后返回的回调 URL - 这与 OAuth 同意屏幕中的授权域不同。

步骤:

  1. 在项目的 GCP 控制台中,转到 APIs & Services > Credentials 并单击 + CREATE CREDENTIALS > OAuth Client ID
  2. 点击Web Application 并为您的客户端凭据命名。
  3. Authorized redirect URIs 下,输入https://localhost:8080
  4. 创建您的凭据。

现在,您需要下载这些新凭据并将其用于您的应用程序。您也可能需要更改应用中列出的协议以使用https,如下所示:

    # ...
    redirect_url='https://localhost:8080')

【讨论】:

  • 我还没有这样做,所以值得一试。只是为了清楚重定向网址应该是https而不是http?我只看到了后者。
  • 两者都应该工作,但如果您正在使用身份验证流程,最好通过 https 进行操作
  • 经过大量的摆弄和配置后,将其添加到重定向 URL 不起作用。我仍然收到授权错误。是否有用于重定向的特定 url?
猜你喜欢
  • 1970-01-01
  • 2021-10-14
  • 2021-01-23
  • 1970-01-01
  • 2022-12-06
  • 2021-03-05
  • 2015-04-03
  • 1970-01-01
  • 2015-03-08
相关资源
最近更新 更多