栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何使用python以编程方式获取GCP Bearer令牌

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何使用python以编程方式获取GCP Bearer令牌

答案取决于您的环境以及您如何创建/获取凭据。

什么是Google Cloud凭据?

Google Cloud凭证是OAuth 2.0令牌。此令牌至少具有

Access Token
RefreshToken
,并且可选地包含
Client ID Token
,和支持参数,例如
expiration
Service AccountEmail
Client Email
等。

Google Cloud API中的重要项目是

AccessToken
。该令牌授权访问云。该令牌可用于诸如
curl
,诸如的软件等程序中
python
,并且不需要SDK。的
AccessToken
是在HTTP中使用
Authorization
报头。

什么是访问令牌?

访问令牌是Google生成的不透明值,它是从Signed
JWT(更正确地称为JWS)派生而来的。JWT由标头和声明(有效负载)Json结构组成。这两个Json结构是使用服务帐户的私钥签名的。这些值经过base64编码和连接以创建访问密钥。

访问令牌的格式为:

base64(header) + '.' + base64(payload) + '.' + base64(signature)

这是一个JWT示例:

标头:

{  "alg": "RS256",  "typ": "JWT",  "kid": "42ba1e234ac91ffca687a5b5b3d0ca2d7ce0fc0a"}

有效负载:

{  "iss": "myservice@myproject.iam.gserviceaccount.com",  "iat": 1493833746,  "aud": "myservice.appspot.com",  "exp": 1493837346,  "sub": "myservice@myproject.iam.gserviceaccount.com"}

使用访问令牌:

启动虚拟机实例的示例。替换PROJECT_ID,ZONE和INSTANCE_NAME。此示例适用于Windows。

curl -v -X GET -H "Authorization: Bearer <access_token_here>" ^https://www.googleapis.com/compute/v1/projects/%PROJECT_ID%/zones/%ZONE%/instances/%INSTANCE_NAME%/start

Compute Engine服务帐户:

在这种情况下,达斯汀的答案是正确的,但是为了完整起见,我将提供一些附加信息。

这些凭据由GCP自动为您创建,并从VM实例元数据中获取。权限由

Cloud API access scopes
Google控制台控制。

但是,这些凭据有一些限制。要修改凭据,必须首先停止VM实例。此外,不支持所有权限(角色)。

from google.auth import compute_enginecred = compute_engine.Credentials()

服务帐户凭据:

在您了解凭证的所有类型及其用例之前,这些凭证将用于除

gcloud
和以外的所有内容
gsutil
。了解这些凭据将使编写程序时使用Google
Cloud变得更加简单。从Google Service Account
Json文件获取凭证很容易。唯一需要注意的是凭证过期(通常为60分钟),并且需要刷新或重新创建。

gcloud auth print-access-token
不推荐。服务帐户凭据是Google推荐的方法。

这些凭证由控制台,gcloud或通过程序/ API创建。权限由IAM分配给贷方,并在Compute Engine,App
Engine,Firestore,Kubernetes等以及Google Cloud之外的其他环境中起作用。这些凭证从Google
Cloud下载并存储在Json文件中。注意该

scopes
参数。这定义了授予结果凭证对象的权限。

SCOPES = ['https://www.googleapis.com/auth/sqlservice.admin']SERVICE_ACCOUNT_FILE = 'service-account-credentials.json'from google.oauth2 import service_accountcred = service_account.Credentials.from_service_account_file( SERVICE_ACCOUNT_FILE, scopes=SCOPES)

Google OAuth 2.0凭证:

这些凭据来自完整的OAuth
2.0流。这些凭据是在启动浏览器以访问Google帐户以授权访问时生成的。该过程要复杂得多,需要大量代码来实现,并且需要内置的Web服务器来进行授权回调。

此方法提供了其他功能,例如能够在浏览器中运行所有内容,例如,您可以创建云存储文件浏览器,但是请务必了解安全隐患。此方法是用于支持Google登录等的技术。我喜欢在允许在网站等上发布之前使用此方法对用户进行身份验证。使用正确授权的OAuth
2.0身份和范围的可能性是无限的。

使用的示例代码

google_auth_oauthlib

from google_auth_oauthlib.flow import InstalledAppFlowflow = InstalledAppFlow.from_client_secrets_file(    'client_secrets.json',    scopes=scope)cred = flow.run_local_server(    host='localhost',    port=8088,    authorization_prompt_message='Please visit this URL: {url}',    success_message='The auth flow is complete; you may close this window.',    open_browser=True)

使用该

requests_oauthlib
库的示例代码:

from requests_oauthlib import OAuth2Sessiongcp = OAuth2Session(        app.config['gcp_client_id'],        scope=scope,        redirect_uri=redirect_uri)# print('Requesting authorization url:', authorization_base_url)authorization_url, state = gcp.authorization_url(  authorization_base_url,  access_type="offline",  prompt="consent",  include_granted_scopes='true')session['oauth_state'] = statereturn redirect(authorization_url)# Next section of pre after the browser approves the requesttoken = gcp.fetch_token( token_url, client_secret=app.config['gcp_client_secret'], authorization_response=request.url)


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/624246.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号