对于我当前的项目,我想同时使用Cloud Endpoints和Cloud Storage API。
当您对云端点进行身份验证时,来自 Google 的示例井字游戏应用程序指出,应将access_token设置为如下所示的id_token(请参阅 github 存储库):
var token = gapi.auth.getToken();
// Use id_token instead of bearer token
token.access_token = token.id_token;
但是,一旦access_token设置为id_token,就不能再使用其他谷歌API。就我而言,云存储API。这样做的原因是访问令牌现在对他们无效。例如,云存储 API 返回无效凭据。在将access_token设置为id_token之前,access_token如下所示:ya29.AHES6ZTjklghkljghlkjfghkljsrdölizuklhlfghI_UTfghdfghCg
。它被替换为我不想在这里发布的id_token,因为它真的很长。
我能想到的两个解决方案是:
- 复制 gapi 对象,每个对象都有一个单独的身份验证对象和令牌。将一个与id_token一起使用用于云端点,另一个用于其余部分(我无法以使其成为可能的方式复制对象)
- 记住某处的身份验证令牌,并根据我调用的 api(云端点/其他 api)替换它(这可能需要同步并且有些混乱)
我对这个问题的解决方案和可行的解决方法非常感兴趣。
如果您遇到此问题,请阅读下面的答案和我的评论。完成此操作后,您将了解这个问题实际上更多是这个问题:如何在开发服务器上使用Oauth测试云终结点
我会把问题留在这里,以防有人在里面搜索术语。
Python Tic Tac Toe 示例似乎需要更新。在此特殊情况下不再需要 ID 令牌。(Java 示例使用的是 Google+ 登录,因此它的要求略有不同。
您可以省略对令牌的操作,它将自动适用于端点和您正在调用的任何其他 Google API。请参阅 Python "Hello Endpoints" 示例,了解它的外观(最值得注意的是其中没有的内容)。