2010-11-18 37 views
4

我正在寻找一种方式让两个Google Apps应用程序彼此对话并在彼此之间共享数据。我有以下情形:Google应用程序应用程序彼此对话

  • 应用A登录用户在使用谷歌Apps的登录
  • 应用B登录用户在使用谷歌Apps的登录
  • 那么这些应用程序需要直接传达给对方(服务器到服务器)使用一些API

问题是:这些应用程序如何验证另一个用同一个用户登录到Google?我猜想是这样的: - 应用程序A得到了一些“令牌”从谷歌,并将其发送到应用程序B - 应用B验证此令牌的有效期为同谷歌帐户,因为它是与

登录是否有一种通过Google联合登录完成此操作的方法?我在这里谈论Hybrid protocol

回答

1

这里有一个简单的方法来做到这一点:

  1. 你把一切都键入用户的谷歌用户ID在这两个应用程序。
  2. 您使用包含用户标识的HTTP请求共享数据。
  3. 为了防止用户标识(通过帐户API禁止)泄漏并验证消息是否真的来自其他应用程序,请使用对称密码(如AES或Blowfish)或任何您喜欢的密码来加密请求。两个应用程序都嵌入了相同的密钥。

你可以公钥密码学。只有两个应用程序,我认为这不值得。如果你开始有更多的应用程序,公钥是有道理的。

细则:如果没有附加措施,加密不保证完整性或原点。您需要防止播放,例如通过合并时间戳或序列号。您需要防范篡改,例如与校验和。确保使用CBC和良好的初始化向量。保持关键的秘密。

+0

感谢您的答复,但我如何验证其他应用程序真的登录时使用的相同用户ID给Google吗?这是我的关键问题。 – 2010-11-19 16:46:27

1

user.user_id()对于同一用户的所有应用程序总是相同的。因此,您可以简单比较user.user_id()返回的值。这是你想要的?

注意:对于所有App Engine应用程序,每个用户都有相同的用户ID 。如果 您的应用程序使用公开的 数据中的用户标识(例如通过将其包含在URL 参数中),则应该使用散列 算法,其中“salt”值被添加​​到 会掩盖该标识。公开原始ID可能允许某人在一个应用中将用户的 活动与另一个应用中的 相关联,或通过强制用户将 签署到另一个应用中来获取用户的电子邮件地址 地址。

From docs

+1

非常感谢指针 - 但我想这个值永远不会改变,对吧?一个应用程序可以“缓存”它并永久提交?这里没什么大不了的,但也许有一些不太常见的东西,比如每会话标记? – 2010-11-19 19:50:24

+0

是的,这个值永远不会改变。你可以自己创建和处理令牌。没有什么比这个内置的应用引擎。 – 2010-11-19 21:13:37