2012-05-01 38 views
14

我的Android客戶端連接到我的AppEngine服務器,均使用Google帳戶。我想使用AccountManager爲OAuth獲取accessToken。到目前爲止,我正在使用ClientLogin,但我想切換到OAuth。我可以使用Android的AccountManager獲取AppEngine的OAuth訪問令牌嗎?

在AppEngine上設置OAuth很簡單 - 我跟着this article。但客戶端是一個謎,特別是我不知道如何使用範圍,在AccountManager條款authTokenType。對於ClientLogin,我使用「ah」作爲authTokenType。但是OAuth呢?

+1

你是否看了 「App Engine的連接Android項目」 Eclipse插件的選項?它會自動爲您生成必要的代碼。 –

+0

我沒有真正使用它,但是,IIRC,範圍是你的整個應用程序。所以像'http://myapp.appspot.com' –

+0

我已經看過「App Engine連接的Android項目」,它使用ClientLogin,而不是OAuth。作爲範圍的完整域名可能工作,我會嘗試。 –

回答

6

我不確定您嘗試執行的操作可能是通過您引用的文章中使用的App Engine OAuthService實現的。另外它聲明,AppEngine OAuthService只支持OAuth 1,但Android只支持OAuth 2 :)所以你擰了。

如果你想要做跨Android的 - 應用程序引擎的認證,我會做的是:

  1. 在Android中:獲得來自的AccountManager用戶信息API(範圍= https://www.googleapis.com/auth/userinfo.emailhttps://www.googleapis.com/auth/userinfo.profile)的訪問令牌。
  2. 將訪問令牌傳遞到App Engine中的請求的URL參數中(請確保您使用HTTPS以避免截取!)。
  3. 在App Engine端:使用訪問令牌使用UserInfo API來讀取用戶的身份。這基本上是使用OpenID Connect!
  4. 然後,您可以使用從UserInfo API獲取的信息對用戶進行身份驗證。您從UserInfo API獲得的電子郵件和用戶ID等同於您從AppEngine的UserService =>您可以信任的電子郵件和用戶ID!

PS:I中所述獲得在this article使用Android的AccountManager OAuth的2個令牌。這是寫在冰淇淋前三明治,但我跳它仍然有效。基本上authTokenType需要爲oauth2:{scopes},因此例如oauth2:https://www.googleapis.com/auth/tasks爲Tasks API。現在可能有更好的方法來做到這一點。

+1

感謝您指引我正確的方向。不過,我不需要通過API來管理AppEngine,所以我不認爲這個範圍會起作用。我只想以普通用戶的身份通過Google帳戶登錄AppEngine。 –

+0

麻煩的是,您從'AccountManager'獲得的訪問令牌只對您的Android應用有效,因此如果您的網站嘗試使用相同的令牌,它將被拒絕。我還沒有找到解決辦法,我不能相信沒有人有這個問題... – Timmmm

+0

我不認爲通過使用App Engine的認證的API是可能的......另外據說AppEngine服務只支持OAuth 1,但Android只支持OAuth 2 :),所以你被搞砸了。 – Nivco

相關問題