如何通过离线访问为 Google API 生成 "client_secret.json"

How to generate "client_secret.json" for Google API with offline access

我正在尝试使用 service account 在后端服务中向 google API 进行身份验证。它根本没有 UI。

我使用 service account 从 google 开发控制台生成了 json 格式的私钥,但其中没有名为“client_secret”的字段。

我在 github, and its structure should be correctly parsed by GoogleClientSecrets class 上找到了这个例子。

如 github 示例中那样生成正确的 client_secret.json 的步骤是什么?

如果您没有客户端密码,那么您生成的凭据类型有误。

创建一个client_secret.json文件。你去 Google developer console.

  1. 创建项目
  2. 转到左侧的凭据选项卡
  3. 单击此页面顶部名为“创建凭据”的按钮
  4. select在下拉菜单中的“服务帐号”中填写所需信息。

然后系统会提示您下载 client_secret.json 文件。

如果您打算使用任何 google API,请务必转到左侧的库并启用您将使用的 API。

我需要在很长一段时间后再次执行此操作,我正在记录截至 2022 年 5 月的步骤。

  • 登录到google云控制台

  • 转到 API 服务 -> 凭据

  • 单击“+ 创建凭据”,然后 select 服务帐户

    • 填写服务帐号名称,它会创建一个默认帐号id
    • 点击“创建并继续”
    • 在角色 selection screen 中,我 selected 所有者,因为这是我的个人项目。如果您的服务将被外部各方访问,请考虑仅提供必需的权限
    • 点击继续
    • 我在屏幕 3 上没有 select 任何 user/admin 角色。单击“完成”。
  • 您将返回凭据屏幕。单击您刚刚创建的服务帐户电子邮件。

    • 您应该位于“详细信息”选项卡上。单击 KEYS 选项卡。
    • 单击“添加密钥”下拉菜单,然后单击“创建新密钥”。
    • Select JSON 键类型(默认),然后单击创建。
    • 这应该会为您下载一个 json 文件。那个文件

然后您可以使用凭据访问 Google 服务。例如,在我的例子中,我使用以下代码访问 youtube 服务。 clientSecretsStream 是该凭据 json 文件的输入流。

public static YouTube initializeYouTube(InputStream clientSecretsStream, String appName) throws IOException {
    final HttpTransport httpTransport = new NetHttpTransport();
    final JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();

    GoogleCredential credential = GoogleCredential.fromStream(clientSecretsStream)
            .createScoped(Collections.singleton(YouTubeScopes.YOUTUBE_READONLY));

    return new YouTube.Builder(httpTransport, jsonFactory, credential)
            .setApplicationName(appName)
            .build();
}