【问题标题】:How to obtain a GCP Bearer token programatically如何以编程方式获取 GCP Bearer 令牌
【发布时间】:2017-09-28 10:14:57
【问题描述】:

gcloud auth print-access-token 给了我一个承载令牌,我以后可以使用。令牌看起来像: Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg

如何在不使用 gcloud 的情况下获得这样的令牌,最好是通过一些 python 代码。

#!/usr/bin/python

from oauth2client.client import GoogleCredentials
credentials = GoogleCredentials.get_application_default()
credentials.get_access_token()
token1 = credentials.access_token
# magic piece of code to convert token1 into the 
# example Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg
# type.

【问题讨论】:

    标签: python google-cloud-platform google-container-registry


    【解决方案1】:

    您的代码 sn-p 生成的令牌是您需要的标头令牌。您应该可以简单地将“授权”标头设置为"Bearer "+token1

    请注意,访问令牌确实会过期,因此,如果您有一个长期存在的应用程序,则不能简单地存储访问令牌并永远使用它。最终你会得到一个 401 并且你必须得到一个新的访问令牌。

    最佳做法是让 HTTP 调用自动处理 401 以获取新的 access_token。这通常也会为您处理缓存访问令牌,因此您无需担心这一点。事实上你可以这样做:

    http = credentials.authorize(httplib2.Http())
    

    然后整天使用http 处理您的请求,完全不用担心访问令牌。

    【讨论】:

    • {"errors":[{"code":"DENIED","message":"Failed to read tags for host... 我无法获得此授权。该帐户具有正确的权限,我能够通过 _token auth curl 并排列出 docker 标签。
    • 该错误消息来自 GCR,其中有一些special 授权注意事项。您也有可能通过了正确的身份验证,但服务帐户未获得您请求的特定数据的授权。您可以发布发出请求的完整代码吗?您能看到您的服务帐号对 aritfact.PROJECT.appspot.com 存储桶拥有哪些 GCS 权限吗?
    猜你喜欢
    • 2019-04-27
    • 2019-02-12
    • 2021-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 2019-09-18
    相关资源
    最近更新 更多