【问题标题】:Google Cloud OAuth consent screen not reflecting changes to scope of (internal) appGoogle Cloud OAuth 同意屏幕未反映(内部)应用范围的更改
【发布时间】:2020-05-25 14:47:10
【问题描述】:

背景

我最初使用完整的 Google Drive 范围 (../auth/drive) 设置了我的 Google Cloud 应用程序,并测试了与我的个人帐户的连接(即授予应用程序权限)。我正在使用PyDriveFYI。

我随后从我的个人帐户中删除了该应用程序(与云端硬盘断开连接),删除了 OAuth 同意屏幕设置中的全部范围,并仅将其替换为 @987654324 @范围。

然后,为了安全起见,我删除了 OAuth 凭据并重新创建了它们(并将它们重新下载到我的机器上)。

预期行为

当出现 OAuth 屏幕时,我现在希望范围反映应用程序只能访问它自己创建的文件和文件夹。

实际行为

OAuth 同意屏幕仍然告诉我该应用可以访问我的云端硬盘中的所有文件和文件夹。

我用来验证的代码

from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive

...

    gauth = GoogleAuth()

    gauth.LoadCredentialsFile("app_user_secrets.json")

    if gauth.credentials is None:
        gauth.GetFlow()
        gauth.flow.params.update({"access_type": "offline"})
        gauth.flow.params.update({"approval_prompt": "force"})
        gauth.LocalWebserverAuth()
    elif gauth.access_token_expired:
        gauth.Refresh()
    else:
        gauth.Authorize()

    gauth.SaveCredentialsFile("app_user_secrets.json")

    drive = GoogleDrive(gauth)

任何想法为什么会发生这种情况或我可以如何解决它?

【问题讨论】:

  • 我见过issuetracker.google.com/issues/150325704,但我不相信它是相关的。
  • 您使用的是服务帐户吗?您的应用程序有哪些范围?您能提供您的(经过清理的)身份验证流程吗?
  • 我设置了两个服务帐户,都是默认的 - 一个用于 App Engine,一个用于 Compute Engine。我(现在)在我的同意屏幕上的唯一范围是 emailprofileopenid../auth/drive.file。我不确定您所说的“身份验证流程”是什么意思,但会使用我运行的身份验证代码更新问题。

标签: python google-drive-api google-oauth


【解决方案1】:

原来PyDrive 默认设置自己的 OAuth 范围,除非您覆盖它们。默认为https://www.googleapis.com/auth/drive,如下所述:https://pythonhosted.org/PyDrive/oauth.html#automatic-and-custom-authentication-with-settings-yaml

我通过编辑身份验证流程并在 LocalWebserverAuth() 命令之前添加以下行来修复并覆盖此问题。

gauth.settings["oauth_scope"] = "https://www.googleapis.com/auth/drive.file"

另一种选择是编写我自己的 settings.yaml 文件,但我不想走这条路。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-02
    • 2020-05-02
    • 1970-01-01
    • 2019-06-17
    • 1970-01-01
    • 2021-07-29
    • 1970-01-01
    • 2016-12-11
    相关资源
    最近更新 更多