2010-11-18 36 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