java - 用于后端 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 的任何方法吗?
解决方案
可以在 Google 开发者控制台上创建三种主要类型的 credetilas。
- 网络凭据
- 已安装的凭据
- 服务帐户凭据
每种类型的凭据文件都不同,代码也不同。您使用的代码用于已安装的应用程序,AuthorizationCodeInstalledApp
因此除非您创建了已安装的凭据,否则该代码将无法正常工作。
服务帐户的代码应该是这样的。
HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
GoogleCredential credential = GoogleCredential
.fromStream(new FileInputStream(KEY_FILE_LOCATION))
.createScoped(scopes);
推荐阅读
- python - 导入时的 Boto3 弃用警告
- javascript - 如何使用html
- ruby-on-rails - Rails 5 smtp Sendgrid 451 身份验证失败:无法进行身份验证
- javascript - 如何在浏览器中从 JS 调用 Here Maps 应用程序?
- python - 如何强制一组非线性方程在 Python 中产生积极的结果?
- c++ - 如何返回我的二维数组并在其他函数中使用它?
- javascript - 如何将此对象转换为列表并在 HTML 上显示?
- java - 如何将字符串位列表(["0","0","1","0"] 等)转换为 Java 中的 int?
- c# - .Net Core XSLT 转换引发异常“无效的 XML 字符”。但在 .Net Framework 上工作正常
- ruby-on-rails - 在无头 Chrome 中启用/查看 console.log 消息