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

如何在Dart中为Cloud Run服务生成ID Token?

使用服务账号在Dart中生成Cloud Run认证用ID Token

完全可以通过服务账号生成针对Cloud Run服务的ID Token,这类Token的有效期可自主控制(最长1小时),能解决你遇到的Token频繁变化导致请求失效的问题。

步骤1:添加依赖

在你的pubspec.yaml中添加以下依赖:

dependencies:
  googleapis_auth: ^1.4.1
  http: ^1.1.0

步骤2:代码实现

下面是完整的代码示例,包含加载服务账号密钥、生成ID Token以及调用Cloud Run服务的逻辑:

import 'dart:convert';
import 'dart:io';
import 'package:googleapis_auth/auth_io.dart';
import 'package:http/http.dart' as http;

// 生成针对Cloud Run服务的ID Token
Future<String> generateCloudRunIdToken(String serviceAccountPath, String cloudRunAudience) async {
  // 加载服务账号JSON密钥文件
  final serviceAccountJson = json.decode(await File(serviceAccountPath).readAsString());
  final credentials = ServiceAccountCredentials.fromJson(serviceAccountJson);

  // 生成ID Token,audience必须是Cloud Run服务的完整URL
  final client = await clientViaServiceAccount(credentials, []);
  try {
    final token = await obtainIdToken(client, credentials, cloudRunAudience);
    return token.idToken!;
  } finally {
    client.close();
  }
}

// 调用Cloud Run服务示例
Future<void> callCloudRunService(String serviceAccountPath, String cloudRunUrl) async {
  final idToken = await generateCloudRunIdToken(serviceAccountPath, cloudRunUrl);
  
  final response = await http.get(
    Uri.parse(cloudRunUrl),
    headers: {
      'Authorization': 'Bearer $idToken',
    },
  );

  if (response.statusCode == 200) {
    print('请求成功: ${response.body}');
  } else {
    print('请求失败,状态码: ${response.statusCode}, 响应: ${response.body}');
  }
}

void main() async {
  // 替换为你的服务账号密钥文件路径
  const serviceAccountPath = 'path/to/your/service-account-key.json';
  // 替换为你的Cloud Run服务完整URL
  const cloudRunUrl = 'https://your-cloud-run-service-xxxxx.a.run.app';

  await callCloudRunService(serviceAccountPath, cloudRunUrl);
}

关键注意事项

  • 服务账号权限:确保你的服务账号被授予roles/run.invoker角色,否则生成的Token无法通过Cloud Run的认证。
  • Token有效期:生成的ID Token最长有效期为3600秒(1小时),建议在Token过期前提前刷新(比如提前5分钟重新生成),避免请求中断。
  • 密钥安全:不要将服务账号密钥硬编码在代码中,建议通过环境变量加载或者使用Google Cloud Secret Manager管理密钥。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 09:52:16