【问题标题】:How to use OAUTH with gapi client library for Google Cloud Endpoints and Google Cloud Storage at the same time如何同时为 Google Cloud Endpoints 和 Google Cloud Storage 使用 OAUTH 和 gapi 客户端库
【发布时间】:2013-10-23 14:27:20
【问题描述】:

对于我当前的项目,我想同时使用 Cloud Endpoints 和 Cloud Storage API。

当您对云端点进行身份验证时,来自 Google 的示例井字游戏应用程序声明应将 access_token 设置为 id_token,如下所示(请参阅github repository):

var token = gapi.auth.getToken();
// Use id_token instead of bearer token
token.access_token = token.id_token;

但是,一旦将 access_token 设置为 id_token,就不能再使用其他 google api。就我而言,云存储 API。原因是访问令牌现在对他们无效。例如,云存储 api 返回 Invalid credential。 在将 access_token 设置为 id_token 之前,access_token 如下所示:ya29.AHES6ZTjklghkljghlkjfghkljsrdölizuklhlfghI_UTfghdfghCg。它被替换为我不想在此处发布的 id_token,因为它真的很长。

我能想到的两个解决方案是:

  • 复制 gapi 对象,每个对象都有一个单独的身份验证对象和令牌。将带有 id_token 的一个用于云端点,另一个用于其余的(我无法以一种使这成为可能的方式复制对象)
  • 在某处记住身份验证令牌并根据我调用的 api(云端点/其他 api)替换它(这可能需要同步并且有点混乱)

我对这个问题的解决方案和可行的解决方法非常感兴趣。

如果您遇到此问题,请阅读下面的答案和我的 cmets。一旦你完成了,你就会明白这个问题实际上更多的是这个问题:How do I test Cloud Endpoints with Oauth on devserver

我会在此处留下问题,以防有人搜索其中的术语。

【问题讨论】:

  • 你在使用gapi.auth.authorize函数吗?如果是这样,您可以使用 scope 参数将您的令牌范围限定为多个 API。
  • 是的,我确实使用 gapi.auth.authorize 与 userinfo.email 和云存储的两个范围。授权函数调用回调,它执行gapi.client.oauth2.userinfo.get().execute(function(resp) { if (!resp.code) { var token = gapi.auth.getToken(); token.access_token = token.id_token; gapi.auth.setToken(token);,但是当 access_token 设置为 id_token 时,存储 api 给我 Invalid credential 错误,而 clound enpoints 工作正常。

标签: javascript google-api google-cloud-storage google-cloud-endpoints google-api-client


【解决方案1】:

Python Tic Tac Toe 示例似乎需要更新。在这种特殊情况下,不再需要 ID 令牌。 (Java example 使用的是 Google+ 登录,因此要求略有不同。)

您可以省略对令牌的操作,它会自动适用于 Endpoints 以及您调用的任何其他 Google API。请参阅Python "Hello Endpoints" example 了解它的外观(最值得注意的是其中没有的内容)。

【讨论】:

  • 我会试试的。我昨天看到的是,当 access_token 不是 id_token 时,云端点不再工作 - 但我可能有问题。新的 python 示例看起来更好,我想知道我是否需要为它升级 App Engine SDK。
  • 你是对的。我们不必用 id_token 替换 access_token。我现在发现的问题是:如果我不使用 id_token,那么 user.getEmail() 将返回 example@example.com。为此已经有一个开放堆栈溢出问题,请参见此处:stackoverflow.com/questions/19117695/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多