使用 google gdata 客户端 API 从 Java/Scala 进行 OAuth2 授权

2024-06-24

您将如何执行与“执行 OAuth 2.0”小节中的 Google .Net 示例 https://developers.google.com/google-apps/spreadsheets/,使用等效的 Java api?

我尝试使用 Java api 模仿的那个 .Net 示例似乎适合发送 api 请求来创建授权 url,然后假设我将在浏览器中使用该 url 来获取访问代码...从而允许服务器端代码此后,对于该谷歌帐户,使用谷歌电子表格 API。

我发现的最隐蔽的 Google Java api 类是OAuth助手 http://grepcode.com/file/repo1.maven.org/maven2/com.google.gdata/core/1.47.1/com/google/gdata/client/authn/oauth/OAuthHelper.java#OAuthHelper,但似乎需要userAuthorizationUrl在实例化时,这实际上是我希望通过它自己的方式从中获得的创建用户授权Url方法 https://developers.google.com/gdata/javadoc/com/google/gdata/client/authn/oauth/OAuthHelper#createUserAuthorizationUrl(com.google.gdata.client.authn.oauth.OAuthParameters) 在我成功实例化它之后- 对我来说有点循环难题。这似乎表明我在假设中遗漏了一些东西,可能这不是用于模仿 .Net 代码示例的正确类。

非常感谢您的帮助。


好像http://soatutorials.blogspot.co.at/2013/08/google-spreadsheet-api-connecting-with.html http://soatutorials.blogspot.co.at/2013/08/google-spreadsheet-api-connecting-with.html有Java版的。

Scala 解决方案代码,由http://javatoscala.com/ http://javatoscala.com/ :

package com.articlio.googleApi
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;

import com.google.gdata.client.GoogleService;
import com.google.gdata.client.authn.oauth.GoogleOAuthHelper;
import com.google.gdata.client.authn.oauth.GoogleOAuthParameters;
import com.google.gdata.client.authn.oauth.OAuthException;
import com.google.gdata.client.authn.oauth.OAuthHmacSha1Signer;
import com.google.gdata.client.authn.oauth.OAuthRsaSha1Signer;
import com.google.gdata.client.authn.oauth.OAuthSigner;
import com.google.gdata.client.spreadsheet.SpreadsheetService;
import com.google.gdata.data.spreadsheet.SpreadsheetFeed
import com.google.gdata.data.BaseEntry;
import com.google.gdata.data.BaseFeed;
import com.google.gdata.data.Feed;
import com.google.gdata.util.AuthenticationException;
import com.google.gdata.util.ServiceException;

//remove if not needed
import scala.collection.JavaConversions._

object OAuth2Sample {

  def loginOAuth2(clientID: String, clientSecret: String) {
    val SCOPES = "https://docs.google.com/feeds https://spreadsheets.google.com/feeds"
    val oauthParameters = new GoogleOAuthParameters
    oauthParameters.setOAuthConsumerKey(clientID) //
    var signer: OAuthSigner = null
    oauthParameters.setOAuthConsumerSecret(clientSecret) //
    signer = new OAuthHmacSha1Signer()
    val oauthHelper = new GoogleOAuthHelper(signer)
    oauthParameters.setScope(SCOPES)
    try {
      oauthHelper.getUnauthorizedRequestToken(oauthParameters)
    } catch {
      case e: OAuthException => e.printStackTrace()
    }
    val requestUrl = oauthHelper.createUserAuthorizationUrl(oauthParameters)
    println(requestUrl)
    println("Please visit the URL above to authorize your OAuth " + 
      "request token.  Once that is complete, press any key to " + 
      "continue...")
    try {
      System.in.read()
    } catch {
      case e: IOException => e.printStackTrace()
    }
    var token: String = null
    try {
      token = oauthHelper.getAccessToken(oauthParameters)
    } catch {
      case e: OAuthException => e.printStackTrace()
    }
    println("OAuth Access Token: " + token)
    println()
    var feedUrl: URL = null
    try {
      feedUrl = new URL("https://spreadsheets.google.com/feeds/spreadsheets/private/full")
    } catch {
      case e: MalformedURLException => e.printStackTrace()
    }
    println("Sending request to " + feedUrl.toString)
    println()
    val googleService = new SpreadsheetService("oauth-sample-app")
    try {
      googleService.setOAuthCredentials(oauthParameters, signer)
    } catch {
      case e: OAuthException => e.printStackTrace()
    }
    val feed = googleService.getFeed(feedUrl, classOf[SpreadsheetFeed])
    val spreadsheets = feed.getEntries
    println("Response Data:")
    println("=====================================================")
    if (spreadsheets != null) {
      for (spreadsheet <- spreadsheets) {
        println(spreadsheet.getTitle.getPlainText)
      }
    }
    println("=====================================================")
    println()
    println("Revoking OAuth Token...")
    try {
      oauthHelper.revokeToken(oauthParameters)
    } catch {
      case e: OAuthException => e.printStackTrace()
    }
    println("OAuth Token revoked...")
  }
}

然而,对于 scala,您目前还需要申请this https://stackoverflow.com/questions/27574210/scala-class-file-broken-error-when-using-java-jar/27574714#27574714...

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 google gdata 客户端 API 从 Java/Scala 进行 OAuth2 授权 的相关文章

  • 如何重命名Google存储桶中的对象?

    如何通过API重命名Google存储桶中的对象 也可以看看尝试重命名 Google Bucket 对象时出错 Google bug https stackoverflow com q 45887797 856090 对象无法重命名 您能做的
  • 如何从回调函数中获取值

    我对 javascript 比较陌生 并且面临一些困难 我有两个 java 脚本文件 如下所示 我无法获取变量的值条目标题在 getRss 函数内并将其存储在变量内Rss1 标题 and Rss2 标题 创建一个全局变量并将其分配给条目标题
  • 在 keycloak 令牌中使用“sub”声明作为内部数据库中的用户 ID 是否安全

    我正在开发一个将来可能支持社交登录的应用程序 除了我们自己的 keycloak 用户名 电子邮件注册之外 我正在尝试确定使用 keycloak ID 令牌中的 sub 声明作为我们内部 mongo 数据库中用户的主键 id 字段 是否安全
  • Spotify PKCE code_verifier 不正确

    我很高兴听到我现在可以通过 PKCE 使用 Spotify Web API 而无需使用后端应用程序 不幸的是 我似乎有某种误解并且无法让它发挥作用 一路上我可能犯了一些小错误 但我做了一次却无济于事 我把石板擦干净并再次尝试 但仍然没有运气
  • 检索 CommentThreads 列表时处理失败错误 (400)

    我试图通过 Python 迭代 分页检索视频的所有评论 我使用开发者密钥正确登录 import googleapiclient discovery as gg import googleapiclient errors as gge yt
  • 新站点预计支持哪些知名 OpenID 提供商?

    我计划开发一个支持 OpenID Connect 作为依赖方的 Web 应用程序 以便该应用程序的用户可以使用他选择的身份提供商进行注册和登录 这与每个 Stack Exchange 站点上的 我的登录 使用的技术相同 该应用程序可供服务器
  • Sage One API - unsupported_grant_type

    我正在尝试通过以下方式获取 Sage One API 的访问令牌docs https developers sageone com docs en v1 authentication request access token using G
  • 如何设置多个过滤器?

    我有一个关于将过滤器应用于多个值以使用 Google 脚本隐藏它们的问题 我有一个具有多种状态的项目跟踪器 例如 达到目标 已完成 已取消 已延迟 等 我想编写一个脚本来设置 状态 列的筛选器值 以便标记为 已完成 或 的行 已取消 被隐藏
  • 使用 Apache HTTPd 模块的 OAuth 2.0 身份验证

    是否可以使用 Apache HTTPd 服务器模块来实现 OAuth 2 0 或 1 0 我选择这条路线是因为每个请求都会首先到达 HTTPd 模块 因此我必须从那里进行身份验证 如果可能的话 请分享相关链接 我要补充一下尤金尼奥的答案mo
  • Google 电子表格中的换行符未在 Google 图表中输出

    这段代码工作完美 除了一个小格式问题 我找不到简单的方法来修复 作为数据源的谷歌电子表格在列中有换行符 然而 在表中 它们看起来好像只是由空格格式化的 我尝试在数据表中使用allowHthml选项 将换行符转换为标签 但这会删除所有格式并使
  • 使用 Python Oauthlib 通过服务帐户验证 Google API

    我不想使用适用于 Python 的 Google API 客户端库 但仍想使用 Python 访问 Google APIOauthlib https github com idan oauthlib 创建服务帐户后谷歌开发者控制台 http
  • Facebook OAuth 验证验证码时有时会发生错误

    我在验证 Facebook 用户身份时遇到一个非常奇怪的问题 基本上它适用于 90 的用户 但对于 10 的用户 我总是收到错误 验证验证码时出错 他们尝试从不同的浏览器 操作系统登录 但总是得到相同的错误 我都是按照书本做的 https
  • Google Play 开发者 API - 400 无效值 - InAppPurchases

    我的问题类似于this one https stackoverflow com questions 35019357 google play developer api query purchase token returns invali
  • OAuth2 - 无需用户交互即可授权

    因此 我尝试通过外部应用程序的 API 访问我自己的数据 我只需要访问我自己的数据 不尝试从我的任何用户帐户接收数据 因此他们不需要授权任何内容 显然我需要避免任何重定向 随着我对 OAuth 的研究越多 这似乎是标准流程 该过程被击中 a
  • 验证 Instagram 时不会重定向到回调 URL

    我的 Instagram 服务器端登录流程遇到问题 我在用 passport js passport instagram 在我的 Node js 服务器的域中example com 一个简单的WebView在我的安卓客户端中 问题是有时输入
  • 从用户访问令牌获取应用程序 ID(或验证令牌的源应用程序)

    我找到了这个question http facebook stackoverflow com questions 6816568 extract app id and user id from facebook access token 其
  • 即使单击“允许”后,也会出现“执行该操作需要授权”消息

    我最近遇到了一个授权新的 Google App Script 项目的问题 特别是使用 Cloud SQL 管理 API 的项目 相同的代码存在于之前授权的 GAS 项目中并且工作正常 但是如果我获取 GAS 项目的副本并尝试第一次运行某个函
  • 如何最大限度地减少 Google API(地点)自动完成的请求量?

    我正在使用 google API 位置来自动完成位置AutoCompleteTextView 我做了几次测试 大概进行了 20 次搜索 在我的 google devs 个人资料中 写着我已经发出了 200 个 API 请求 据我所知 每次我
  • 使用 authlogic-oauth2 服务器无法启动

    我已将 oauth2 和 authlogic oauth2 包含在 gemfile 中 因为我想使用它们并尝试启动服务器 它没有启动并给我错误 Library Ruby Gems 1 8 gems railties 3 0 3 lib ra
  • Google OAuth 2 PHP 调用用户信息

    我正在尝试使用 Google 的 OAuth2 API 在他们的通用文档中 他们提到了一个名为 UserInfo 的调用 http code google com apis accounts docs OAuth2Login html us

随机推荐

  • ES6/Typescript 导入:在一行中导入 * 和名称

    我怎样才能把它写在 1 行上 import as Express from express import Application NextFunction Request Response from express 你的开发者丹 impor
  • 单元测试 SqlFunction

    我有一个公开 IQueryable 的存储库和一个处理特定查询的服务 这里有一些使用 DbFunctions 的方法 为了可测试 我创建了一个带有静态元素列表的假存储库并将其注入到服务中 问题是 由于我的服务查询列表并且不使用数据库 因此我
  • Android studio:调用需要 API 级别 16 错误

    我在 Android studio 中遇到以下错误 这sqlitedatabase close 方法自 API Level 1 起可用 但 android studio ide 无法检测到 几天前 出现了更新版本 版本 AI 130 687
  • MVC 3 Razor Form Post 带多个强类型部分视图不具有约束力

    我很好奇在表单中使用多个强类型部分并回发到包含视图的部分的方法是否是正确的 MVC 处理方法 主视图与以下模型绑定 为简洁起见 省略了其他几个属性和数据注释 public class AccountSetup ViewModelBase p
  • 如何正确使用标签分派来选择构造函数

    我正在尝试为嵌入式系统实现一组互斥锁和锁定类 我以前从未使用过标签调度 我不确定我做得是否正确 boost 文档中包含的描述只有这样 struct input iterator tag 并用它来选择一个专门的模板函数 我没有模板 我只想根据
  • 如何在Intellij Idea中运行Kotlin函数

    我创建了一个测试项目 旨在从 IntelliJ IDEA CE 中的 Kotlin 开始 IDE版本和系统为2017 1 4 Build IC 171 4694 23 构建于2017年6月6日 JRE 1 8 0 112 release 7
  • 将带有 SKEffectNode 的 CIFilter 应用到 SKSpriteNode

    我正在尝试将带有 SKEffectNode 的 CIFilter 应用于 SKSpriteNode 无法让它工作 也不知道为什么 我使用模糊来实现此功能 但无法获得单色照片效果 有人有任何见解吗 再次感谢 Mono Effect not w
  • 为什么 ServiceStack Razor FileSystemWatcher 不能在 Mono + Mac OS X 上工作?

    ServiceStack 对 Razor v2 的新支持使用FileSystemWatcher检测跟踪视图文件的更改并将其标记为无效 以便在下一个请求时重新编译它们 这对于调试非常有用 因为它允许您编辑视图而不是重建 重新启动项目 在我的
  • 不使用 System.IO.FileInfo 获取文件大小?

    是否有可能获得size不使用 C 中的文件System IO FileInfo at all 我知道您可以使用名称和扩展名等其他信息Path GetFileName yourFilePath and Path GetExtension yo
  • 车把 if 语句,索引 = 某个值

    我正在尝试创建一个表 用 JSON 文件中的对象填充每个表单元格 我的车把模板只是添加了每个对象的数据 我想要完成的是 每第 5 个项目创建一个新行 然后继续填充表格单元格 直到第 10 个项目 然后创建一个新行等 我一直在阅读 index
  • 为什么 GCC 不自动矢量化这个循环?

    我正在尝试优化一个占用程序大量计算时间的循环 但是 当我使用 O3 ffast math ftree vectorizer verbose 6 GCC 输出打开自动矢量化时 它无法对循环进行矢量化 我正在使用海湾合作委员会4 4 5 代码
  • Keras 均方误差损失层

    我目前正在实现一个自定义损失层 在此过程中 我偶然发现了 Objectives py 文件 1 中均方误差的实现 我知道我对这种损失计算的理解遗漏了一些东西 因为我一直认为平均值是在每个小批量 张量的轴 0 中的每个输出的样本之间单独完成的
  • 为什么 Android Studio 中的模拟器很慢?

    我刚刚在我的电脑上安装了 Android Studio 这是新推出的用于开发 Android 应用程序的软件 我的问题是 当我尝试在模拟器中运行我的小应用程序时 启动需要很长时间 然后模拟器运行速度也很慢 AVD 设置 AVD名称 银河设备
  • 可视化因素

    我遇到了一个问题 要求我打印一个表格来可视化每个整数的所有因子 范围从1 to limit 然后它指定给定位置i 从 开始1连续n 那么一个 表明i是一个因素n and 表明它不是 下面是输出的示例 我知道我必须使用模运算符来测试因子和 f
  • ASP.NET Core 2.1 + Log4Net

    我在 ASP NET Core 2 1 项目中使用 log4net 我不知道为什么我会收到重复的日志消息 这是我的 log4net config 配置
  • Prolog:给定两个索引,创建子列表

    基本上 我需要创建 sublist S M N L 形式的谓词 其中 S 是由索引 M 和索引 N 之间 含 之间的 L 元素形成的新列表 这是我得到的 sublist sublist M N M gt N sublist S M N L
  • 使用 Java Spring 通过 SSH 执行命令

    我和一位同事正在开发一个 Web 应用程序来控制计算机集群 该计算机集群缺少 API 因此我们需要能够使用 Linux shell 通过 bash 脚本控制和添加 作业 每个用户都有特定的时间在集群上运行应用程序 因此我们需要能够使用用户凭
  • 使用手势或触摸事件旋转节点 Sceneform AR Core

    我在我的应用程序中使用 AR Core 作为 3D 查看器 我没有使用 Sceneform 进行 AR 渲染 而是使用 3D 渲染模型 我面临的问题是如何通过滑动手势或触摸事件来 360 度旋转模型 这对于 sceneform 来说是可能的
  • React Hook useEffect 缺少依赖项:xxx。包含它们或删除依赖项数组react-hooks/exhaustive-deps

    我正在进行 api 调用useEffect hook function ChangePassword props const token props match params token const state setState useSt
  • 使用 google gdata 客户端 API 从 Java/Scala 进行 OAuth2 授权

    您将如何执行与 执行 OAuth 2 0 小节中的 Google Net 示例 https developers google com google apps spreadsheets 使用等效的 Java api 我尝试使用 Java a