2012-10-03 28 views
1

重要:API已經改變 - 首先閱讀: https://developers.google.com/accounts/docs/AuthForInstalledApps如何使用谷歌賬戶從客戶端應用程序登錄到谷歌應用程序引擎服務器?

的ClientLogin已正式棄用2012年4月20日,它 將繼續按照我們的棄用政策的工作,但我們鼓勵 儘快遷移到OAuth 2.0。


我想建立兩個應用客戶端(一些Python/Java程序)和服務器(谷歌App Engine應用程序),並與谷歌的acount驗證從客戶端到服務器,以獲得一些祕密信息。

讓我解釋一下情景:

  1. 服務器的地址是https://example.appspot.com
  2. 客戶想要從https://example.appspot.com/restricted下載受限制的信息,所以這個URL被定義和登錄:app.yaml需要。
  3. 客戶端使用一些Google帳戶example_login和example_password來獲取訪問權限。

如何正確地從客戶端身份驗證到Google App Engine以訪問https://example.appspot.com/restricted

+1

看到這個問題:http://stackoverflow.com/questions/101742/how-do-you-access-an-authenticated-google-app-engine-service-from-a-non-web-py – voscausa

+0

考慮一下自從2008年被問到以來,http://stackoverflow.com/questions/101742/how-do-you-access-an-authenticated-google-app-engine-service-from-a-non-web-py沒有重複並且在ClientLogin成爲谷歌公司以後被推遲使用後,在2012年變得無效。 – Chameleon

回答

1

另一個簡單的方法,不用登錄,就是使用HMAC。您可以根據時間戳創建MAC簽名(以使每個請求都是唯一的)和一個祕密MAC密鑰。您的請求包含時間戳和MAC簽名。服務器可以驗證MAC,因爲它也具有密鑰MAC KEY。

這段Python代碼工作兩側(客戶端和服務器)`:

import hmac, base64, hashlib 

new_hmac = hmac.new(key=my_secret_MAC_KEY, msg=timestamp_in_request, digestmod=hashlib.sha256) 
signature = base64.b64encode(new_hmac.digest()).decode() 
if signature_in_request != signature : raise ValueError('access denied') 

這對於單個用戶工作得很好,因爲你要管理一個密鑰。當你有很多用戶時,客戶端登錄是一個更好的選擇。

+0

想避免這種方法,因爲它會導致我開發定製用戶管理,這會使授權變得複雜。 正如你所說的更好的是,如果你有更多的用戶使用客戶端登錄 - 另一個好處是,用戶知道用一個用戶名和密碼可以用相同的方法在任何地方登錄 - 學習時間更短。 – Chameleon

+0

appcfg.py可以正常使用客戶端登錄。我認爲這是Google應用引擎團隊不使用OAuth2安裝應用程序的唯一原因。 – voscausa

+0

appcfg.py包含ClientLogin並且此代碼仍然有效,但自2012年起在文檔中棄用 - appcfg.py現在還包含一些與oauth相關的代碼 - 搜索字符串APPCFG_CLIENT_ID。嘗試appcfg.py - 幫助它也包含oauth2的選項。 – Chameleon

相關問題