Python 谷歌云-如何在应用程序代码中认证用户而不是服务帐户?

Python 谷歌云-如何在应用程序代码中认证用户而不是服务帐户?,python,google-cloud-platform,oauth-2.0,google-authentication,Python,Google Cloud Platform,Oauth 2.0,Google Authentication,我可以通过在GC控制台中创建和下载credentials.json来授权服务帐户。但此选项不适用于实际的人工用户帐户。我的用户帐户具有某些角色,我希望在应用程序中使用这些角色,并且需要作为该用户帐户进行身份验证。我该怎么做呢?有没有办法为用户帐户下载类似的creds.json文件?经过一番挖掘,部分归功于@JohnHanley,我设法使用google cloud oauth库代表具有正确权限的人类用户对我的应用程序进行身份验证: from google.cloud import secretma

我可以通过在GC控制台中创建和下载credentials.json来授权服务帐户。但此选项不适用于实际的人工用户帐户。我的用户帐户具有某些角色,我希望在应用程序中使用这些角色,并且需要作为该用户帐户进行身份验证。我该怎么做呢?有没有办法为用户帐户下载类似的creds.json文件?

经过一番挖掘,部分归功于@JohnHanley,我设法使用google cloud oauth库代表具有正确权限的人类用户对我的应用程序进行身份验证:

from google.cloud import secretmanager_v1beta1 as secretmanager
from google_auth_oauthlib import flow

SecretManagerAdminCreds = 'credentials.json'
LAUNCH_BROWSER = True


class SecretManagerAdmin:
    def __init__(self, project_id: str = "gcp_project_id",
                 scopes: list = ['https://www.googleapis.com/auth/cloud-platform']):
        self._scopes = scopes
        self._project_id = project_id

        appflow = flow.InstalledAppFlow.from_client_secrets_file(SecretManagerAdminCreds, scopes=self._scopes)

        if LAUNCH_BROWSER:
            appflow.run_local_server()
        else:
            appflow.run_console()

        authed_creds = appflow.credentials

        self.client = secretmanager.SecretManagerServiceClient(credentials=authed_creds)

当我创建SecretManagerAdmin类的实例时,一个浏览器会启动,并要求用户登录到google并确认应用程序的权限,然后返回第二组凭据,然后用于实例化应用程序使用的Secretmanager客户端

经过一些挖掘,部分归功于@JohnHanley,我设法使用google cloud oauth库代表一个拥有正确权限的人类用户对我的应用程序进行身份验证:

from google.cloud import secretmanager_v1beta1 as secretmanager
from google_auth_oauthlib import flow

SecretManagerAdminCreds = 'credentials.json'
LAUNCH_BROWSER = True


class SecretManagerAdmin:
    def __init__(self, project_id: str = "gcp_project_id",
                 scopes: list = ['https://www.googleapis.com/auth/cloud-platform']):
        self._scopes = scopes
        self._project_id = project_id

        appflow = flow.InstalledAppFlow.from_client_secrets_file(SecretManagerAdminCreds, scopes=self._scopes)

        if LAUNCH_BROWSER:
            appflow.run_local_server()
        else:
            appflow.run_console()

        authed_creds = appflow.credentials

        self.client = secretmanager.SecretManagerServiceClient(credentials=authed_creds)

当我创建SecretManagerAdmin类的实例时,一个浏览器会启动,并要求用户登录到google并确认应用程序的权限,然后返回第二组凭据,然后用于实例化应用程序使用的Secretmanager客户端

Google OAuth 2:Python示例:谢谢@JohnHanley。我通读了这些,我确信答案就在那里,但我错过了。我确实找到了:,这让我找到了一个可行的解决方案。可能是同一件事。谢谢你的指点。用你的解决方案发布一个答案,这样这个问题就可以被标记为完整。Google OAuth 2:Python示例:谢谢@JohnHanley。我通读了这些,我确信答案就在那里,但我错过了。我确实找到了:,这让我找到了一个可行的解决方案。可能是同一件事。谢谢你的指点。把答案和你的答案一起贴出来,这样这个问题就可以标记为完成了。