2013-10-16 55 views
1

我一直在閱讀很多關於谷歌終端的內容,我試圖找到一些不太容易猜到的東西。在創建谷歌雲端點服務器之後,您將其部署到任何HTTP請求(未經身份驗證)。在雲終端文檔中(指使用身份驗證),您可以閱讀有關設置OAuth2.0以使用Google帳戶驗證用戶身份的信息,但沒有關於將終端服務限制到特定移動應用程序(android或ios)的文檔,並放棄了所有其他HTTP要求。所以問題是如何驗證移動應用程序(無用戶),並防止HTTP請求(未經身份驗證)?我正在構建基於Python的服務器API(enpoints)。 謝謝。谷歌終端限制只能訪問移動客戶端

回答

1

爲了將您的端點限制到特定的應用程序,您可以使用OAuth2。這是因爲OAuth2流程執行用戶身份驗證,並且OAuth2流程本身會認證請求OAuth2訪問的應用程序。

這兩個客戶端示例詳細說明如何在客戶端啓用經過身份驗證的調用。您必須在開發者控制檯中的http://cloud.google.com/console/處註冊您的應用程序。

https://github.com/GoogleCloudPlatform/appengine-endpoints-helloendpoints-android https://github.com/GoogleCloudPlatform/appengine-endpoints-helloendpoints-ios/(在README第8步)

authedGreeting是經過驗證的電話,你會檢查用戶對象的方法對空後端項目(自述文件中的注意事項後開始)。如果爲空,則可立即引發未經授權的異常。

https://github.com/GoogleCloudPlatform/appengine-endpoints-helloendpoints-java-maven 具體來說,README中的可選步驟2告訴雲端點開始在請求中查找OAuth2令牌。如果端點公開方法具有用戶參數。只有在找到OAuth2標記時,它纔會使用用戶實例填充它,這通常是有效的,並且該標記將發佈到服務類的API註釋中定義的客戶端標識。

0

在設置端點API期間,在clientIds列表中,您提供了例如WEB_CLIENT_IDANDROID_CLIENT_IDIOS_CLIENT_ID。這些值告訴Google App Engine,您的應用程序將響應來自Web瀏覽器和Android/iOS安裝應用程序的HTTPS請求。

當您的客戶端首次連接您的服務器時,他們必須獲得OAuth 2.0令牌才能保證通信安全,這就是您在安裝的客戶端應用程序中使用WEB_CLIENT_ID的原因。這WEB_CLIENT_ID是唯一的谷歌雲應用程序,並通過它你的客戶變成能夠獲得access_tokenrenew_token與您後端服務器您的服務器只通信。這是一個cross-client authorization

所以,如果你只需要WEB_CLIENT_ID獲得access_tokenrenew_token,所以你必須ANDROID_CLIENT_IDIOS_CLIENT_ID?出於安全原因。

ANDROID_CLIENT_ID通過在後端設置處通知的SHA1鏈接到RSA簽名密鑰。因此,你的GAE應用程序將授予(當然你clientIds列表)(access_token, renew_token),在您的應用程序控制臺所列舉的相同的密鑰簽名只安裝的應用程序

最後的Android應用程序有不同的簽名或沒有簽名將不會收到任何access_token,暫時無法建立安全通信通道,甚至與您的服務器通信。