我可以通过运行
gcloud
命令行工具轻松获取使用 Google Cloud API 所需的访问令牌(有效期仅 1 小时):
./google-cloud-sdk/bin/gcloud auth application-default print-access-token
但是,我需要从 Node.js 和 Flutter 应用程序获取访问令牌。我无法这样做,因为所需的信息包括 cliendID 和 clientSecret (我有),但也包括刷新令牌(我没有)。事实上,即使我可以获得刷新令牌,它也会定期过期。该怎么办?如何从我的应用访问 Google Cloud API?
更新:以下是如何在 Node.js 中执行此操作:
const { GoogleAuth } = require('google-auth-library');
async function getAccessToken() {
const auth = new GoogleAuth({
keyFilename: 'path/to/your/service-account-key.json',
scopes: 'https://www.googleapis.com/auth/cloud-platform'
});
const client = await auth.getClient();
const accessToken = await client.getAccessToken();
return accessToken;
}
但我仍然不知道如何在 Dart/Flutter 中做到这一点......
使用服务帐户密钥很少是解决方案
您的前端无法直接访问 Google API。正确的模式如下:
前端(flutter?)-> 后端(Cloud Run 上的节点?)-> Google API
在该模式中,由于元数据服务器(而不是服务帐户密钥),您可以使用后端服务帐户生成访问令牌。
现在的问题是:后端访问是公开的还是私有的?这取决于您的用例。如果需要身份验证,您可以使用 Cloud Identity(或 firebase auth)