【问题标题】:Google Calendar: 401 Invalid Credentials on certain API endpointsGoogle 日历:某些 API 端点上的 401 无效凭据
【发布时间】:2019-09-02 08:49:24
【问题描述】:

我有代码可以从 Google 的日历 API 中检索事件列表。检索到这些事件后,它会根据我拥有的另一个本地列表检查该列表,并使用本地列表中尚未包含的任何事件填充 Google 日历事件。

第一部分运行良好,它将检索访问令牌,然后在请求中使用该令牌来获取事件列表。下一部分,当它尝试上传事件失败时,会出现 401“Invalid Credentials”错误消息。

我已经检查了控制台 API 中的所有内容,以确保 Google 日历已作为 API 启用,并且其中的所有内容都已正确设置。我检查了 API 文档,以确保我在我的身份验证请求中使用正确的范围进行 API 发布查询以将事件提交给 GCal。

在这一点上,我不确定这是否是请求的问题,并且消息只是极具误导性,或者问题是否真的与授权有关,而我只是完全遗漏了其他东西。

request = new RestRequest("/calendars/"+calID+"/events", Method.POST);
request.AddParameter("access_token", access_token);
request.AddJsonBody(import);

IRestResponse<GCalEvent> inner_response = client.Execute<GCalEvent>(request);

在上面的代码中,access_token 变量与成功请求检索事件前几秒使用的值相同。 (即它应该是有效的。)

指定的“导入”变量基于以下自定义对象模型:

public class GCalEvent
{
   public string id { get; set; }
   public string status { get; set; }
   public string htmlLink { get; set; }
   public DateTime created { get; set; }
   public DateTime updated { get; set; }
   public string summary { get; set; }
   public string description { get; set; }
   public string start { get; set; } // yyyy-MM-dd
   public string end { get; set; } // yyyy-MM-dd
}

我们非常欢迎任何帮助或建议,因为我已经为此苦苦挣扎了一段时间。

【问题讨论】:

  • 我会使用嗅探器来查看是否可以获得更多信息。这里有一些事情要检查。 1)查看响应是使用 http 1.0(流模式)还是 1.1(块模式) 2)检查 http 标头中的语言国家/地区设置 3)检查响应中的浏览器类型(IE 或 chrome)。不同的机器可能有不同的默认浏览器设置 4) 检查机器上的证书以确保安装了正确的证书并且没有过期。
  • 传统上,访问令牌作为授权标头传递。

标签: c# google-calendar-api


【解决方案1】:

也许您需要像这样添加访问令牌request.AddHeader("Authorization", "Bearer " + access_token);

【讨论】:

  • 非常感谢 Khaled :) 试过这个,它似乎确实有效。看起来谷歌需要更新他们的文档。啧啧啧。 “在您的应用程序获得访问令牌后,您可以使用该令牌代表给定的用户帐户或服务帐户调用 Google API。为此,请在对 API 的请求中包含访问令牌,方法是包含access_token 查询参数或 Authorization: Bearer HTTP 标头。”
猜你喜欢
  • 2020-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多