Google服务帐户(Service Account)是一种特殊类型的Google账号,用于代表应用程序而非个人用户进行身份验证。通过服务帐户获取的access_token可以用于访问Google的各种API,包括嵌入API(Embedding API)。
from google.oauth2 import service_account
from google.auth.transport.requests import Request
# 替换为你的服务帐户JSON文件路径
SERVICE_ACCOUNT_FILE = 'path/to/service-account.json'
SCOPES = ['https://www.googleapis.com/auth/cloud-platform']
def get_access_token():
credentials = service_account.Credentials.from_service_account_file(
SERVICE_ACCOUNT_FILE, scopes=SCOPES)
# 刷新token
credentials.refresh(Request())
return credentials.token
access_token = get_access_token()
print(access_token)
import jwt
import requests
import time
from datetime import datetime, timedelta
# 服务帐户信息
SERVICE_ACCOUNT_EMAIL = 'your-service-account@project-id.iam.gserviceaccount.com'
PRIVATE_KEY_PATH = 'path/to/private-key.pem'
SCOPES = ['https://www.googleapis.com/auth/cloud-platform']
def generate_jwt():
now = datetime.utcnow()
expiry = now + timedelta(minutes=60)
with open(PRIVATE_KEY_PATH, 'r') as f:
private_key = f.read()
payload = {
'iss': SERVICE_ACCOUNT_EMAIL,
'scope': ' '.join(SCOPES),
'aud': 'https://oauth2.googleapis.com/token',
'exp': int(expiry.timestamp()),
'iat': int(now.timestamp())
}
return jwt.encode(payload, private_key, algorithm='RS256')
def get_access_token():
jwt_token = generate_jwt()
response = requests.post(
'https://oauth2.googleapis.com/token',
data={
'grant_type': 'urn:ietf:params:oauth:grant-type:jwt-bearer',
'assertion': jwt_token
}
)
return response.json()['access_token']
access_token = get_access_token()
print(access_token)
# 激活服务帐户
gcloud auth activate-service-account --key-file=service-account.json
# 获取access_token
gcloud auth print-access-token
通过以上方法和注意事项,您可以安全有效地从Google服务帐户获取access_token,用于访问Embedding API或其他Google服务。