我正在編寫一個Google App Engine應用程序以及一個CLI客戶端,一個Android客戶端和一個Javascript客戶端。此應用程序的目的是允許用戶使用CLI或Javascript客戶端來控制安裝了Android客戶端的Android手機。在Google App Engine上,我可以將使用Android AccountManager的Google OAuth 2令牌和SACSID令牌關聯起來嗎?
身份驗證扮演着至關重要的角色,因爲錯誤可能允許惡意用戶控制他人的手機。
Android客戶端編寫和工作。它使用this method對用戶進行身份驗證。基本上,這給我一個所謂的SACSID令牌,我可以存儲在一個cookie中。當設置此Cookie時,App Engine會識別我的用戶。然後,服務器應用程序可以調用UserService以獲取要在其上調用getUserId()的用戶。 getUserId()返回一個標識我的用戶的不透明字符串。到現在爲止還挺好。
現在我正在編寫JS和CLI客戶端。 由於CLI客戶端沒有可靠的方式來顯示CAPTCHA或打開瀏覽器,我想它需要使用Device API(「客戶端登錄」不是一個選項)。此API需要使用OAuth 2進行身份驗證。另外,我希望JS客戶端訪問用戶的聯繫人,這似乎也表明OAuth 2將是合適的。
如果我的用戶使用OAuth 2進行身份驗證,我是否會以某種方式將此OAuth 2令牌轉換爲與Android客戶端連接時獲得的相同的不透明字符串?如果沒有,我可以修改我的Android應用程序,以便它使用OAuth而不是Sacsid標記?
更具體地講,我認爲這將解決我的問題三件事情:
- 從客戶經理獲取OAuth 2令牌的方式
- 一個交換的OAuth 2令牌的方式SACSID令牌
- 使用SACSID令牌和OAuth2獲取相同的不透明用戶ID的方式,但只有在同一應用程序上同時具有兩個身份驗證系統時纔是如此。
類似於第三種可能的解決方案的東西是從OAuth和SACSID令牌獲取用戶的電子郵件地址,並將其用作用戶ID。然而,這看起來有點笨拙對我說:
- 每當我收到一個OAuth 2的要求,我需要打電話給谷歌API來獲取用戶的電子郵件地址(或建立自己的令牌系統,這似乎是不安全的,並介紹許多其他困難)。
- 給定用戶的電子郵件地址可能會發生變化,使我失去用戶與其以前的數據之間的關聯。