Python中从oauth2client迁移到google-auth获取Google ADC访问令牌
替换oauth2client获取用户ADC访问令牌的正确方式
要替代已废弃的oauth2client,使用google-auth库获取用户通过gcloud auth application-default login生成的应用默认凭据(ADC)访问令牌,你需要注意几个核心要点:
google.auth.default()返回的是凭据对象和项目ID的元组,需正确解构- 用户凭据必须指定权限范围(scopes),否则可能无法获取有效令牌
- 要主动检查凭据有效性并刷新,避免令牌过期或未初始化
完整代码示例
from google.auth import default from google.auth.transport.requests import Request # 根据你的实际API权限需求调整范围 SCOPES = ['https://www.googleapis.com/auth/cloud-platform'] # 获取默认凭据与关联的项目ID credentials, project_id = default(scopes=SCOPES) # 刷新凭据(如果令牌无效、过期或未生成) if not credentials.valid: credentials.refresh(Request()) # 获取可用的访问令牌 access_token = credentials.token
关键说明
- 解构返回值:
default()方法会返回两个值,必须同时接收凭据和项目ID(即使你不需要项目ID),否则会触发类型错误。 - 指定Scopes:用户登录时需明确权限范围,否则生成的ADC可能没有足够权限访问目标服务,这一步是必须项。
- 凭据刷新:用户凭据的访问令牌不会永久有效,通过
credentials.valid检查状态,无效时调用refresh(Request())重新获取令牌,逻辑和服务账号的用法一致。
与旧代码的对应关系
- 旧代码中
GoogleCredentials.get_application_default()→ 新代码default(scopes=SCOPES) - 旧代码中
credentials.get_access_token().access_token→ 新代码中先刷新凭据,再取credentials.token
内容的提问来源于stack exchange,提问作者John Heyer
相关产品推荐
相关产品推荐

