背景
我最初使用完整的 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/