python - Google Cloud OAuth 同意屏幕未反射(reflect)(内部)应用程序范围的更改

标签 python google-drive-api google-oauth

背景

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

我随后从我的个人帐户中删除了该应用(与云端硬盘断开连接),删除了 OAuth 同意屏幕 设置中的完整范围,并仅将其替换为 ../auth/drive.file 范围。

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

预期行为

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

实际行为

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)

有什么想法为什么会发生这种情况或者我该如何解决它吗?

最佳答案

事实证明,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 文件,但我不想走这条路。

关于python - Google Cloud OAuth 同意屏幕未反射(reflect)(内部)应用程序范围的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62004877/

相关文章:

python - 意外的 Python 打印行为

python - 使用 Python 仅检索部分 Azure 文本 blob,而不是整个 blob

android - 如何使用 Google Drive SDK 对结果进行排序?

java - 谁有权使用 Google 的 OAuth 2 客户端访问我的应用程序?

python - 教我 pandas dataframe 的方法来做到这一点?

python - 使用 Numpy 和 while 循环生成所有可能的加法组合

C# 桌面应用程序。如何将文件上传到 Google 云端硬盘的简单示例

google-api - 如何调用 Google API

google-oauth - 如何模拟域以使用 Oauth2 访问 Google API Admin SDK?

python - 导入的 python 模块覆盖选项解析器