首页 > 解决方案 > 如何为 C++ 的 gRPC 正确配置凭据?

问题描述

再会。

我正在编写一个小型 C++ 项目,并在其中使用 Google Cloud Translation API。我没有找到适合我的适用于 C++ 的 Google Cloud Translation API 的任何示例。因此,我稍微修改了 Google Cloud Speech API 示例。我几乎成功了,但是我无法通过 gRPC 授权。

我设置了一个 Google 帐户。该application_default_credentials.json文件位于默认文件夹 ( ~/.config/gcloud) 中。该gcloud auth application-default print-access-token命令输出一个有效的访问令牌。

来自 Google Cloud Speech API 示例的 gRPC 连接通常经过授权并连接到 Google 云。但是由于某种原因,我的代码中没有出现 gRPC 授权,该代码是为 Google Cloud Translation API 重新设计的。

这是我的代码:

#include <grpc++/grpc++.h>
#include <google/cloud/translate/v3/translation_service.grpc.pb.h>

using google::cloud::translation::v3::TranslationService;
using google::cloud::translation::v3::TranslateTextRequest;
using google::cloud::translation::v3::TranslateTextResponse;
using namespace std;

void Test()
{
  auto creds = grpc::GoogleDefaultCredentials();
  auto channel = grpc::CreateChannel("translation.googleapis.com", creds);
  std::unique_ptr<TranslationService::Stub> translator(TranslationService::NewStub(channel));

  grpc::ClientContext context;

  TranslateTextRequest request;
  request.set_parent("projects/<**My-Project-Id**>/locations/global");
  request.set_source_language_code("en-US");
  request.set_target_language_code("ru");
  request.set_mime_type("text/plain");
  request.add_contents("Hello World!");

  TranslateTextResponse response;
  grpc::Status status = translator->TranslateText(&context, request, &response);

  cout << status.ok() << endl << status.error_message() << endl;
}

运行此代码将显示以下内容:

0 Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential.
See https://developers.google.com/identity/sign-in/web/devconsole-project.

显然,由于某种原因,在打开 gRPC 连接时我的凭据设置不适用。

谁能帮帮我吗?有没有人有任何使用谷歌云翻译 API 和 gRPC 的 C++ 编程语言的经验?

标签: google-cloud-platformgoogle-translategoogle-translation-api

解决方案


推荐阅读