在我的meteor应用程序中,如何代表我的用户进行经过身份验证的google API调用?

在我的meteor应用程序中,如何代表我的用户进行经过身份验证的google API调用?,meteor,google-api,google-calendar-api,Meteor,Google Api,Google Calendar Api,背景:这是我的第一个独立web开发项目,我在Meteor方面的唯一经验是在去年夏天构建Discover Meteor应用程序。我从一年左右的CS经验作为学校的一个侧面兴趣,我最喜欢C和C++。我有python和java方面的经验 迄今为止的项目:我正在创建一个日历管理系统(为了好玩)。使用谷歌账户,我创建了通过谷歌认证的用户账户。我已请求我的应用程序所需的必要权限,包括“身份”和“日历读/写权限”。我花了大约一周的时间试图克服下一个障碍,这实际上是从谷歌获取数据 目标:我希望能够使用GET请求对

背景:这是我的第一个独立web开发项目,我在Meteor方面的唯一经验是在去年夏天构建Discover Meteor应用程序。我从一年左右的CS经验作为学校的一个侧面兴趣,我最喜欢C和C++。我有python和java方面的经验

迄今为止的项目:我正在创建一个日历管理系统(为了好玩)。使用谷歌账户,我创建了通过谷歌认证的用户账户。我已请求我的应用程序所需的必要权限,包括“身份”和“日历读/写权限”。我花了大约一周的时间试图克服下一个障碍,这实际上是从谷歌获取数据

目标:我希望能够使用GET请求对进行API调用。我已经调用了meteor add http来添加GET请求功能,我的问题是实际的实现

问题:我已在开发者控制台上注册了我的应用程序,并使用客户端ID和密码设置了帐户,但我无法找到/生成用于请求的“API密钥”。是使用我(已经)下载的私钥创建访问令牌的google指南。我很难在服务器端使用JS实现,因为我对实现示例的HTTP/REST部分没有太多经验。如果您能为我的应用程序提供一些关于如何实现握手和接收访问令牌的帮助,我将不胜感激。如果我可以打一个电话,或者有一个包可以为我处理令牌生成,那将比实现帮助更好。我相信这一问题的答案也会有好处

到目前为止,我所指的答案是:其中一些是西班牙语,但它的代码非常容易理解。他有一个API密钥用于他的请求,我问这个问题是为了帮助我。谷歌的
账户
文档并不足以向我解释这一切


还有一个不相关的小问题:处理请求中的“时间”参数的最简单方法是什么。我假设JS有一些我还不知道的内置功能

所以我开始尝试自己在服务器端实现所有这些功能,但对我正在进行的大量硬编码和为填补空白而做出的假设持谨慎态度。我的安全教授曾经说过“你自己永远不要实现加密”,所以我决定再买一个有用的软件包。将搜索条件修改为“JWT”,我在Atmosphere上找到了jagi的
meteor google oauth JWT
。自述文件很全面,提供了我需要的一切。按照中使用的流程,可以发出授权请求并生成用于进行API调用的密钥

链接到大气:

链接至回购:

我将用我在Google API过程中遇到的任何其他障碍以及我如何解决这些障碍来更新此答案:

最近,我遇到了API请求结果的问题。我从API调用中得到一个空日历列表。我怀疑这是因为我对我的开发者帐户而不是主题用户进行了API调用。我将调查这个问题,或者创建一个新问题,或者用我找到的修复程序更新这个解决方案

修复:没有将'sub'限定符包含到JWT令牌中。通过修改JWT包令牌生成代码,将
delegationEmail:user.services.google.email
添加到
scope
之后,修复了此问题。我不知道为什么他使用了这么长的选项名称,而不是像谷歌API中那样使用
sub:
,但我很欣赏他的软件包


我很快就会精通这一点,所以如果人们有与流星相关的谷歌认证问题,请告诉我。

感谢您的研究。我也问了一个问题,现在我正在研究你推荐的套餐。我考虑过这个方案,但它看起来被放弃了

关于你关于时间操纵的问题,我推荐MomentJS。外面有很多包裹;我使用的是
meteor add-mrt:moment

EDIT:MomentJS现在有了Meteor的官方软件包,所以使用
Meteor添加MomentJS:moment
而不是上面的
mrt
命令

下面是一段moment可以做的事情。更多文档


不要使用上面发布的服务帐户

正确的方法是使用标准web访问+请求脱机访问。api页面上的文档特别说明:

通常,当应用程序使用GoogleAPI处理自己的数据而不是用户的数据时,应用程序使用服务帐户

唯一的例外情况是,当您使用google apps域帐户并希望将对整个域的访问权委托给您的服务帐户时:

授权服务帐户代表域中的用户访问数据有时被称为“授权域范围的权限”

这是合乎逻辑的,因为必须允许用户“授权”您的应用程序

回到海报的原始问题流程很简单:

1) Meteor accounts google软件包已经为您完成了获取代币的大部分工作。您可以包括所需的脱机访问范围

2) 如果您正在构建自己的流程,您将按照上所述完成库存标准流程和调用

这将要求您:

1) HTTP调用来发出原始请求,或者您可以利用一些内部meteor调用:Package.oauth.oauth.showPopup()--看看源代码,那里有更多漂亮的函数

2) 然后您需要创建一个Iron路由器服务器端路由来接受oauth响应
var startTimeUTC = moment.utc(event.startTime, "YYYY-MM-DD HH:mm:ss").format();
//Changes above formatting to "2014-09-08T08:02:17-05:00" (ISO 8601)
//which is acceptable time format for Google API