str*_*iek 5 python google-compute-engine google-container-registry
我获得的访问令牌gcloud auth print-access-token显然不同于我可以通过一些基本的python代码获得的访问令牌:
export GOOGLE_APPLICATION_CREDENTIALS=/the-credentials.json
from oauth2client.client import GoogleCredentials
credentials = GoogleCredentials.get_application_default()
credentials.get_access_token()
Run Code Online (Sandbox Code Playgroud)
我正在尝试做的是获得一个可以与之配合使用的令牌:
curl -u _token:<mytoken> https://eu.gcr.io/v2/my-project/my-docker-image/tags/list
Run Code Online (Sandbox Code Playgroud)
我不希望将gcloud实用程序安装为我的应用程序的依赖项,因此,我尝试通过誓约google凭据以编程方式获取访问令牌
小智 1
我知道这是一个非常古老的问题,但我刚刚遇到了完全相同的问题,即在 Python 中需要 ACCESS_TOKEN 并且无法生成它,并设法使其工作。
您需要做的是使用变量credentials.token,但一旦您首次创建凭证对象并返回 ,它就不会存在None。为了生成令牌,google.cloud 库必须使用凭据,在我的例子中,这是通过使用以下方法完成的googleapiclient.discovery.build:
sqladmin = googleapiclient.discovery.build('sqladmin', 'v1beta4', credentials=credentials)
response = sqladmin.instances().get(project=PROJECT_ID, instance=INSTANCE_ID).execute()
print(json.dumps(response))
Run Code Online (Sandbox Code Playgroud)
之后可以使用正确生成 ACCESS_TOKEN
access_token = credentials.token
Run Code Online (Sandbox Code Playgroud)
我还使用它google.cloud storage作为测试凭证的方法进行了测试,并且它也有效,只需尝试通过适当的 Python 库访问 GCS 中的存储桶即可:
from google.oauth2 import service_account
from google.cloud import storage
PROJECT_ID = your_project_id_here
SCOPES = ['https://www.googleapis.com/auth/sqlservice.admin']
SERVICE_ACCOUNT_FILE = '/path/to/service.json'
credentials = service_account.Credentials.from_service_account_file(
SERVICE_ACCOUNT_FILE, scopes=SCOPES)
try:
list(storage.Client(project=PROJECT_ID, credentials=credentials).bucket('random_bucket').list_blobs())
except:
print("Failed because no bucket exists named 'random_bucket' in your project... but that doesn't matter, what matters is that the library tried to use the credentials and in doing so generated an access_token, which is what we're interested in right now")
access_token = credentials.token
print(access_token)
Run Code Online (Sandbox Code Playgroud)