首页 > 解决方案 > 用于后端 Java 服务的 Google Oauth

问题描述

我需要运行后台服务,以每天使用Youtube Analytics API为已链接的频道拉取 Youtube Analytics

由于它将在后台运行,因此可以直接访问 Google 的 Oauth 服务,就像使用 grant_type client_credentials 一样。但是,此处提供的所有示例中涵盖的流程需要一个完整的流程,用户必须使用授权流程从浏览器进行授权

 GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
            HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, scopes).setCredentialDataStore(datastore)
            .build();

    // Build the local server and bind it to port 8080
    LocalServerReceiver localReceiver = new LocalServerReceiver.Builder().setPort(8080).build();

    // Authorize.
    return new AuthorizationCodeInstalledApp(flow, localReceiver).authorize("user");

我也尝试过使用 API 密钥,但 Analytics API 不支持。有人知道基于允许后端作业使用 Analytics API 的服务帐户生成和检索 access_token 的任何方法吗?

标签: javagoogle-api-java-clientservice-accountsyoutube-analytics-apiyoutube-analytics

解决方案


可以在 Google 开发者控制台上创建三种主要类型的 credetilas。

  • 网络凭据
  • 已安装的凭据
  • 服务帐户凭据

每种类型的凭据文件都不同,代码也不同。您使用的代码用于已安装的应用程序,AuthorizationCodeInstalledApp因此除非您创建了已安装的凭据,否则该代码将无法正常工作。

服务帐户的代码应该是这样的。

 HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
    GoogleCredential credential = GoogleCredential
        .fromStream(new FileInputStream(KEY_FILE_LOCATION))
        .createScoped(scopes);

推荐阅读