oauth2.0 如何获得Google Vertex AI服务的授权令牌?

zynd9foi  于 2023-10-15  发布在  Go
关注(0)|答案(3)|浏览(175)

我尝试通过REST调用Google的Vertex AI API,如下所示:
https://us-central1-aiplatform.googleapis.com/v1/projects/...
我很难弄清楚在哪里可以获得“访问令牌”:

-X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \

我能够从Google CLI生成一个短期的OAUth,但我想生成一个长期的。我尝试了以下方法,所有这些都返回401错误:

  • API密钥
  • 服务帐户

我只需要这个做测试。有没有办法让我轻松地做到这一点?
使用Google CLI,但这是一个短期解决方案。令牌在30分钟后过期。

pkwftd7m

pkwftd7m1#

您可以通过REST API(请参阅文档)执行此操作,并满足以下要求
默认情况下,最大令牌生存期为1小时(3,600秒)。要将这些令牌的最大生存期延长到12小时(43,200秒),请将服务帐户添加到包含constraints/iam.allowServiceAccountCredentialLifetimeExtension列表约束的组织策略中。
要使用REST API,您需要执行一个POST方法,
https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/PRIV_SA:generateAccessToken
与身体

{
  "scope": [
    "https://www.googleapis.com/auth/cloud-platform"
  ],
  "lifetime": "LIFETIME"
}

哪里

**LIFETIME:**访问令牌到期前的时间,单位为秒。例如,300 s
**PRIV_SA:**创建短期令牌的承载令牌服务账户的邮箱地址。

您当前的方法是通过gcloud CLI。根据文件,
Google Cloud CLI不支持设置令牌的生命周期
这意味着你被限制在默认的时间限制内,这个时间限制被设计得很短(访问令牌被称为短期凭证)

j2cgzkjk

j2cgzkjk2#

我终于能够从NodeJS和正常的服务帐户调用Palm(野牛)。请参见代码:

import { JWT } from "google-auth-library";

const API_ENDPOINT = "us-central1-aiplatform.googleapis.com";
const URL = `https://${API_ENDPOINT}/v1/projects/${process.env.GOOGLE_KEY}/locations/us-central1/publishers/google/models/chat-bison@001:predict`;

const getIdToken = async () => {
    const client = new JWT({
        keyFile: "./google.json",
        scopes: ["https://www.googleapis.com/auth/cloud-platform"],
    });
    const idToken = await client.authorize();
    return idToken.access_token;
};

export const getTextPalm = async (prompt, temperature) => {
    const headers = {
        Authorization: `Bearer ` + (await getIdToken()),
        "Content-Type": "application/json",
    };

    const data = {
        instances: [
            {
                context: "",
                examples: [],
                messages: [
                    {
                        author: "user",
                        content: prompt,
                    },
                ],
            },
        ],
        parameters: {
            temperature: temperature || 0.5,
            maxOutputTokens: 1024,
            topP: 0.8,
            topK: 40,
        },
    };

    const response = await fetch(URL, {
        method: "POST",
        headers,
        body: JSON.stringify(data),
    });

    if (!response.ok) {
        console.error(response.statusText);
        throw new Error("Request failed " + response.statusText);
    }

    const result = await response.json();
    return result.predictions[0].candidates[0].content;
};

我还必须为服务帐户添加一些权限,如下所示:

7gcisfzg

7gcisfzg3#

更新:现在你可以使用google makersuite来生成一个简单的API key see step-by-step,在makersuite中为vertexAI生成API key,但目前还处于封闭测试阶段。然后调用顶点AI API,&key=thatKey
如果没有makersuite,由于您在非GCE服务器上,因此需要模拟服务帐户
您将需要这些配置步骤,以便该链接中的说明起作用:
1.安装Google Cloud SDK
1.创建服务帐户:如果您还没有这样做,并给予必要的权限。
1.获取服务帐户密钥文件。
1.使用“gcloud auth activate-service-account --key-file=[PATH_TO_KEY_FILE]”设置身份验证
1.通过将GOOGLE_APPLICATION_CREDENTIALS环境变量设置为服务帐户密钥文件的路径来模拟服务帐户。此步骤对于要与服务帐户关联的API调用至关重要。
1.生成(短期)访问令牌,并根据需要重新生成,因为您现在已经安装了密钥文件。

相关问题