2012-10-05 52 views
8

我正在開發一個Android應用程序,它使用設備上的可用谷歌帳戶向服務器端組件驗證用戶。Android:驗證服務器上的設備Google帳戶名稱

我發送谷歌帳戶名稱(Gmail地址)到服務器,但能夠驗證它與服務器上的谷歌,我要求在Android設備上的oauth令牌,並將其發送到服務器以及。

問題是,雖然我不需要訪問額外的用戶信息,但我必須使用oauth電子郵件範圍打開確認對話框。我不喜歡這個對話框,因爲我要驗證帳戶名稱不訪問用戶信息。

還有 AccountManager.getPassword(account)但我不喜歡溝通或使用用戶密碼。

也可以像使用Web應用程序一樣使用WebView和驗證用戶(例如使用OpenId),但它似乎不是設備上的最佳解決方案。

是否有任何其他/更好的方式來驗證服務器上的設備帳戶名稱?

+0

我不認爲有可能無需登錄(帳戶名+密碼)驗證用戶accout名稱。 以任何方式使用oAuth(首次登錄)或直接登錄 - 您必須使用pair(login + pass)。 我有更新的答案,從任何身份驗證服務,如不正確的密碼登錄「xxx」。 –

+0

本文可能有所幫助:http://android-developers.blogspot.com.es/2013/01/verifying-back-end-calls-from-android.html?m=1 – mjn

+0

@mjn謝謝,這就是我正在尋找!隨意添加它作爲答案,所以我可以接受它。 –

回答

1

本文給出了詳細的 - 無線個源代碼 - 驗證過程的描述:

由蒂姆·佈雷

短版

Verifying Back-End Calls from Android Apps:您可以使用GoogleAuthUtil類,可通過 谷歌Play服務來獲取一個字符串稱爲「ID令牌」 。您將 發送給您的後端,您的後端可以使用它快速且便宜地驗證哪個應用發送了該應用,以及誰正在使用 應用,以便 。

有了這篇文章中的信息,我很容易實現客戶端和服務器端的Android和JavaEE代碼。

2

無法驗證沒有有效令牌的Google帳戶。您可能想參考下面的官方Android文檔。

http://developer.android.com/training/id-auth/index.html

+0

不要太教條,是不是可以用密碼登錄? :)) –

+0

對不起,我不是故意的。服務器端的Google帳戶授權需要有效的oauth令牌。 –

3

使用的AccountManager或谷歌Play服務得到的OAuth2令牌的用戶配置文件(適用範圍:https://www.googleapis.com/auth/userinfo.profile)。然後使用Google端點(https://accounts.google.com/o/oauth2/tokeninfo)進行驗證,並可選擇獲取用戶信息。這裏提供了一個示例應用程序:http://oauthssodemo.appspot.com。你似乎正在做類似的事情,如果是的話,這是正確的(或至少推薦)做到這一點。 順便說一句,您無法獲取用戶密碼,因爲您沒有使用與帳戶提供者相同的證書進行簽名。

唯一的其他(可靠)做到這一點的方法是發送電子郵件到他們的GMail地址隨機令牌,並讓他們輸入它的應用程序。這可以讓你確認他們可以訪問電子郵件,所以它必須是他們的(除非他們偷了別人的設備)。

或者您可以簡單地相信,如果用戶在其設備上註冊了該帳戶,那麼它確實是他們的帳戶,因爲他們在激活設備時至少進行了一次驗證。然後,您只需按照原樣使用Gmail地址,這可能會或可能不足以滿足您的應用程序的需求。

+0

謝謝我已經在做你正在建議的內容(正如你在另一個回答中所建議的那樣)。問題是可以從任何地方調用服務器端api,並且必須在接受它們之前驗證帳戶聲明。也可以使用GCM來驗證每個設備,但是一個有根的設備可以僞造一個帳戶。 –

+0

驗證真正的令牌是唯一可靠的事情(我知道)。 –

1

我建議這樣的:

  • 在設備

    1. 選擇帳戶(獲得的電子郵件地址)

    2. 請求OAuth憑證

  • 發送電子郵件+令牌服務器

  • 在服務器

    1. 使用谷歌的API,以從令牌

    2. 檢索用戶基本信息比較由谷歌與收到一個返回的電子郵件地址

+0

請閱讀我的問題,我已經在做這個。 –

+0

你所要求的是不可能的,而這應該是要走的路。 – shkschneider

相關問題