You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Python Lambda集成Google API的令牌刷新及相关技术问题

Google Campaign Manager 360 与 AWS Lambda Python 集成问题解答

1. AWS Lambda 后台运行时的令牌刷新处理及示例

对于无交互的后台Lambda场景,优先使用Google服务账号(而非用户OAuth2授权码模式),因为服务账号无需用户手动授权,可直接通过JWT签名获取访问令牌,且Google官方库会自动处理令牌生命周期。如果必须沿用原用户授权的OAuth2流程,需存储持久化的刷新令牌,结合google-auth/google-auth-oauthlib库自动完成刷新。

服务账号模式示例(推荐)

  1. 在Google Cloud控制台创建服务账号,下载JSON密钥文件,将密钥内容存入AWS Secrets Manager(避免硬编码)。
  2. Lambda代码示例:
import boto3
from google.oauth2 import service_account
from googleapiclient.discovery import build

# 从Secrets Manager获取服务账号密钥
def get_service_account_key():
    secrets_manager = boto3.client('secretsmanager')
    response = secrets_manager.get_secret_value(SecretId='google-service-account-key')
    return eval(response['SecretString'])

# 初始化Campaign Manager服务
def init_cm_service():
    credentials = service_account.Credentials.from_service_account_info(
        get_service_account_key(),
        scopes=['https://www.googleapis.com/auth/dfareporting']
    )
    # 官方库会自动刷新过期的访问令牌
    return build('dfareporting', 'v4', credentials=credentials)

def lambda_handler(event, context):
    cm_service = init_cm_service()
    # 调用Campaign Manager API拉取报告
    reports = cm_service.reports().list(profileId='YOUR_PROFILE_ID').execute()
    # 后续存入S3逻辑...

用户授权模式(需刷新令牌)

如果必须使用用户OAuth2授权,需先通过授权流程获取刷新令牌(长期有效,除非用户撤销授权),将刷新令牌、客户端ID、客户端密钥存入Secrets Manager,代码示例:

import boto3
from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
import requests

def get_oauth_credentials():
    secrets_manager = boto3.client('secretsmanager')
    secret = eval(secrets_manager.get_secret_value(SecretId='google-oauth-secrets')['SecretString'])
    credentials = Credentials(
        token=None,
        refresh_token=secret['refresh_token'],
        client_id=secret['client_id'],
        client_secret=secret['client_secret'],
        token_uri='https://oauth2.googleapis.com/token',
        scopes=['https://www.googleapis.com/auth/dfareporting']
    )
    # 自动刷新访问令牌
    if not credentials.valid:
        credentials.refresh(requests.Request())
    return credentials

def lambda_handler(event, context):
    credentials = get_oauth_credentials()
    cm_service = build('dfareporting', 'v4', credentials=credentials)
    # 后续逻辑...

2. 集成登录的难度及耗时

这里的集成登录指让SA分析师通过OAuth2授权给Lambda应用的流程:

  • 难度中等:需要配置Google OAuth2客户端(设置授权回调URL,比如用API Gateway作为回调端点),处理授权码交换令牌的逻辑,还要实现令牌的持久化存储(比如Secrets Manager或DynamoDB,按用户区分令牌)。
  • 耗时:如果熟悉AWS API Gateway、Google OAuth配置,大概1-2个工作日可完成。主要耗时点在回调端点的搭建、令牌存储逻辑、权限范围的验证。

但更推荐直接用服务账号模式,无需集成登录,只要给服务账号分配Campaign Manager的对应权限即可,效率更高。

3. 是否可仅通过Rest API和Bearer令牌实现集成

技术上完全可行,但不推荐。

  • 可行点:你可以手动调用Google OAuth2令牌接口获取访问令牌(服务账号用JWT签名请求,用户模式用刷新令牌换令牌),然后在每个API请求的Header里带上Authorization: Bearer <token>,直接调用Campaign Manager的Rest API。
  • 不推荐原因:需要自己处理令牌过期检测、刷新逻辑,服务账号模式还要手动生成JWT签名,容易出现签名错误、令牌过期未处理等问题。Google官方的google-auth和google-api-python-client库已经封装了所有这些细节,稳定性和可维护性更高。

内容的提问来源于stack exchange,提问作者Anthony Williams

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 00:22:31