4

我在概念上难以理解 OAuth2。关于整个握手过程,我已经读过一百遍了。我可以使用 google 帐户登录我的应用程序,但是一旦完成,我需要访问 Google 的 API(从我登录的同一帐户上的 Google 电子表格中读取数据,并且我将电子表格包含在 :scope 中策略自述文件)。

目前,我正在使用 Omniauth 和 omniauth-google-oauth2 策略;这很好用;它会调出 Google 的身份验证/登录屏幕,当我返回回调链接时,我正在存储 [omniauth][credentials][token]。

然后使用该令牌与 Google Docs 一起使用 API 的最佳方法是什么?

这是正确的方法吗?

4

3 回答 3

1

我认为 Oauth2 是一种“获取用户密码以确认他们在我的网站上存在的方式”。

因此,本质上,它使用 Google 说“这家伙很酷”,而不是您的 User 模型有一个密码列。

现在,这与 API 调用有什么关系,你想知道……我也是。

如果我记得,有一个刷新令牌持续超过 20 毫秒的身份验证,如果谷歌的 api 允许你这样做,你可以访问他们的谷歌文档。

说了这么多,如果谷歌需要他们的令牌,加上你的 API 令牌来访问他们的电子表格,我会把它放到会话中。

但是如果他们的 API 说要在范围内粘贴电子表格,那么它也必须说明如何一起使用它,不是吗?

更多编辑

Google 电子表格 Oauth 2.0身份验证部分在这里,有一个流程。请注意有关刷新令牌的部分。我会调查的。

它说将它存储在某个地方,我会选择会话,或者如果你完全偏执于某个地方的 db 列,但也不确定这是否正确。只是在这里吐口水。

最终编辑

事实证明,即使是帮助 Oauth 2.0 的人也不同意/从概念上理解它。

于 2012-06-16T23:42:34.963 回答
1

您也许可以找到一个封装了 Google API 的 gem,以简化您的任务。

这是适用于 Google Drive 和电子表格的一个

于 2012-07-25T13:54:09.537 回答
0

@Galen 提到的google-drive-ruby gem 似乎可以很好地与 google-oauth-2 提供程序配合使用:

猜测您已经将令牌存储在回调处理程序的会话中,例如

  auth = request.env["omniauth.auth"]
  session[:token] = auth["credentials"]["token"]

然后您可以使用它来构建会话并访问工作表:

  require 'googleauth'

  session = GoogleDrive::Session.from_access_token(token)
  worksheet = session.spreadsheet_by_key(spreadsheet_id).worksheet_by_title(worksheet_name)
  ...etc

希望这可以帮助。

于 2017-01-26T23:12:00.500 回答