Google 日历 API 和 OAuth 问题

2024-02-22

我收到错误

com.google.gdata.util.AuthenticationException: Unknown authorization header
     at com.google.gdata.client.http.HttpGDataRequest.handleErrorResponse(HttpGDataRequest.java:600) ~[gdata-core-1.0.jar:na]
     at com.google.gdata.client.http.GoogleGDataRequest.handleErrorResponse(GoogleGDataRequest.java:563) ~[gdata-core-1.0.jar:na]
     at com.google.gdata.client.http.HttpGDataRequest.checkResponse(HttpGDataRequest.java:552) ~[gdata-core-1.0.jar:na]
     at com.google.gdata.client.http.HttpGDataRequest.execute(HttpGDataRequest.java:530) ~[gdata-core-1.0.jar:na]
     at com.google.gdata.client.http.GoogleGDataRequest.execute(GoogleGDataRequest.java:535) ~[gdata-core-1.0.jar:na]

当尝试通过 API 访问 Google 日历数据时。

这是该错误之前发生的情况。

1)我通过谷歌进行身份验证:

final AccessTokenResponse response =
          new GoogleAuthorizationCodeGrant(httpTransport,
                    jsonFactory,
                    clientId, clientSecret, authorizationCode,
                    redirectUrl).execute();

final GoogleAccessProtectedResource accessProtectedResource =
          new GoogleAccessProtectedResource(
                    response.accessToken, httpTransport, jsonFactory,
                    clientId, clientSecret,
                    response.refreshToken);

LOGGER.debug("response.accessToken: {}", response.accessToken);

this.oauthAccessToken = response.accessToken;

...

2)我通过任务API读取一些数据:

    this.service =
            new Tasks(httpTransport, accessProtectedResource,
                    jsonFactory);
    this.service.setApplicationName(this.applicationName);

这似乎有效。

3)然后我尝试从 Google Calendar API 读取数据:

    final OAuthHmacSha1Signer signer = new OAuthHmacSha1Signer();

    final GoogleOAuthParameters  oauth = new GoogleOAuthParameters ();

    oauth.setOAuthConsumerKey("myapp.com");
    oauth.setOAuthConsumerSecret(CLIENT_SECRET); // Client secret from "Google API access" page, "Client secret" entry
    oauth.setOAuthToken(this.oauthAccessToken); // Access token from step 1
    oauth.setOAuthTokenSecret(aAuthorizationCode); 
    // aAuthorizationCode is taken from the callback URL.
    // For http://myapp.com/oauth2callback?code=4/uy8Arb4bhRPwWYSr3QwKPt9lIZkt
    // aAuthorizationCode is equal to "4/uy8Arb4bhRPwWYSr3QwKPt9lIZkt" (without quotes)

    oauth.setScope(SCOPE_CALENDAR); // https://www.google.com/calendar/feeds/

    final CalendarService calendarService =
            new CalendarService(APPLICATION_NAME);

    calendarService
            .setOAuthCredentials(oauth, signer);


    LOGGER.debug("calendarService: {}", calendarService);

    final URL feedUrl =
            new URL(
                    "http://www.google.com/calendar/feeds/default/allcalendars/full");
    final CalendarFeed resultFeed =
            calendarService.getFeed(feedUrl, CalendarFeed.class);

在最后一行 (calendarService.getFeed...) 发生上述异常。

我有以下问题:

1) 是我的电话吗

oauth.setOAuthConsumerKey

correct?

IE。 “消费者密钥”是否等于 Google API 控制台中的“产品名称”或“客户端 ID”字段(值类似于 42912397129473.apps.googleusercontent.com)

2)setOAuthTokenSecret是否正确? IE。当 Google 将用户重定向回我的应用程序时,这是我得到的代码吗?

3) 如果问题 2 和 3 的回答为“是”,那么还有什么原因导致我的问题?

Thanks

Dmitri

P.S.:以前,我可以通过简单的访问(即使用 Google 用户名和密码)来访问 Google 日历。但是,现在这不是一个选项,因为我的应用程序的用户不想泄露他们的 Google 密码。


最后,我按照以下示例解决了我的问题

http://code.google.com/p/gdata-java-client/source/browse/trunk/java/sample/oauth/OAuthExample.java http://code.google.com/p/gdata-java-client/source/browse/trunk/java/sample/oauth/OAuthExample.java

我对所有未来受害者^W OAuth 用户的建议:注意 OAuth 教程中最微小的细节。 OAuth 的魔鬼在于细节。

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

Google 日历 API 和 OAuth 问题 的相关文章

随机推荐

  • 如何防止点击子表单导致主表单更新

    我的预订系统中有一个表单 其中包含一个子表单 该子表单是 Access 2010 不再具有的旧 ActiveX 日历控件的复制品 一个特殊用途是创建新预订 这意味着该表单 位于 新记录上 但是 在我确定所有数据都经过正确验证之前 我不希望写
  • 发送带有附件的电子邮件

    我有一个邮件程序如下 class Payments LateNoticesMailer lt AsyncMailer def notice payment id payment PaymentDecorator find payment i
  • 按返回不会返回到上一个片段

    我在将片段事务添加到返回堆栈时遇到问题 我有一个主要活动 其中我使用菜单片段填充布局 public class MainActivity extends ActionBarActivity Override protected void o
  • 单个表的多个外键和指向多个表的单个键

    我需要数据库设计专家的一些建议 我在一个表中有大约六个外键 缺陷 它们都指向用户表中的主键 它像是 defect assigned to created by updated by closed by 如果我想获取有关缺陷的信息 我可以进行
  • Java中pom.xml文件有什么用? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 POM 文件的主要特征是什么 为什么实际使用它 无论我们在其中提供什么 依赖项如何映射到 Java 虚拟机并在应用程序上变得灵活 项目对象
  • 如何在 MATLAB/Octave 中获得真正的整数溢出?

    我正在为 MATLAB Octave 中的一些 VHDL 代码开发验证工具 因此 我需要生成 真实 溢出的数据类型 intmax int32 1 ans 2147483648 稍后 如果我可以定义变量的位宽度 将会很有帮助 但现在这并不那么
  • 我的最近对问题的分而治之算法的逻辑有什么问题?

    我一直在关注 Coursera 的算法课程 并提出了关于最近对问题的分治算法的想法 我想澄清这一点 根据 Roughgarden 教授的算法 你可以看到here https class coursera org algo 2012 002
  • iOS:澄清不同的搜索路径

    XCode Build Settings 中有三种不同的搜索路径 框架搜索路径 标头搜索路径 库搜索路径 谁能澄清这些路径的作 用以及它们的用途吗 框架搜索路径 在哪里搜索构架 http developer apple com librar
  • 为什么 (0>1 + 0>9) 返回 False,而 ((0>1) + (0>9)) 返回 0?

    在Python中添加布尔表达式时 似乎将它们括在括号中会将它们转换为int当您添加它们时 但不这样做会保留它们的类型 gt gt gt 0 gt 1 0 gt 9 0 gt gt gt 0 gt 1 0 gt 9 False gt gt g
  • 为什么 adParamOutput 参数执行后不包含值

    我使用 ASP classic 和 ADO 连接到 SQL Server 2008 我继承了这段代码 它被严重破坏了 我将尝试重新创建相关部分 如果您需要更多详细信息或者我遗漏了某些内容 请告诉我 我创建一个命令并添加参数 oCmd Com
  • 角度材料中的结束日期 > 开始日期

    我正在构建一个组件 html css spec ts ts 以我一直想要的角度endDate gt startDate 我已关注此链接https material angular io components datepicker overv
  • 如何在 iOS 项目中添加两个或多个 kotlin 原生模块

    TL DR 如何在 iOS 项目上添加两个或多个 kotlin 原生模块而不需要获取duplicate symbols error 详细问题 让我们假设一个多模块 KMP 项目如下 其中存在一个适用于 Android 的本机应用程序和一个适
  • C# 中的 Marshall double[] 到 IntPtr?

    我正在尝试在 C 中将 double 转换为 IntPtr 这是我要转换的数据 double rotX 1 0 0 0 0 0 double rotY 0 0 1 0 0 0 double rotZ 0 0 0 0 1 0 这是我要输入 I
  • 我可以在java中将字符串解析为时间吗

    我正在使用 android text format Time 我需要一个函数来获取字符串并将该字符串转换为 Time 对象 由于其他原因 我最初将时间对象存储为字符串 我现在只需要将字符串传递到 Time 对象中即可 代码 Time tim
  • C++11“重载 lambda”,带有可变参数模板和变量捕获

    我正在研究一个 C 11 习惯用法 它可能被称为 重载 lambda http cpptruths blogspot com 2014 05 fun with lambdas c14 style part 2 html http cpptr
  • 无法通过 Unity 在 Android 上启动活动

    我正在使用 Unity 创建 Android 应用程序 我有两个插件 每个单独工作都很好 但是当我想要同时使用它们时 我无法在它们之间切换活动 在过去的十天里 我阅读了所有类似的问题 并尝试了从反编译 编辑 重新编译 Java 代码到从 U
  • 设置辅助功能上的窗口级别

    我正在开发一个 Mac OS X 应用程序 它操纵属于另一个应用程序的窗口 我为此使用辅助功能 我已经成功移动窗口并从我的应用程序查询其属性 现在我需要使窗口 始终位于顶部 基于另一个帖子 https stackoverflow com q
  • Java (JSP):在“子 jsp”中重复 contentType 标头

    当一个 jsp 中的标头重复包含在另一个 jsp 中时会发生什么情况 例如如果示例 jsp以此开始
  • 在不带“with”的情况下对 data.table 进行键控查找

    我有一个data table像这样的结构 除了我的真的很大 dt lt data table x 1 5 y 3 7 key x 我想通过以下方式查找该结构中的行another名称为的变量x 注意 与密钥的名称相同dt x lt 3 4 d
  • Google 日历 API 和 OAuth 问题

    我收到错误 com google gdata util AuthenticationException Unknown authorization header at com google gdata client http HttpGDa