1

我們正在用Android視圖和網站編寫應用程序。我們的應用程序需要將一些數據與Facebook,Google或Twitter(稱爲'FGT')相關聯,然後點擊相關服務以返回true(如果該數據已通過身份驗證)。控制流是...AccountManager..getAuthToken之後,如何將該令牌發送給其提供程序以進行身份​​驗證?

  1. 的Android生成一些數據
  2. 用戶選擇的FG或T帳戶
  3. getAuthToken
  4. 上傳數據+令牌,通過HTTPS POST,我們的網站
  5. 我們的網站(Django的,這不是問題)發送身份驗證令牌到FGT
  6. FGT返回true如果喜歡令牌,false如果它不

目標是防止攻擊者調製數據並將其投擲到我們的網站curl。我們/不需要將數據一直上傳到F,G或T.我們不需要一直到混合應用程序,我們的Web服務將自己認證爲F,G或T ,然後使用F,G或T的API以用戶名稱發佈,發送電子郵件或發送推文。

對於這個地方有一個明顯的答案,希望只有三個URI,F,G或T各一個,我可以在其中插入Auth令牌。這就是爲什麼我不希望爲Facebook,Google和Twitter中的每一個下載和安裝SDK,然後爲每個案例編寫大量特定於服務的代碼。這會弄亂代碼,並且當客戶端請求Tumblr或MSN時讓我搞砸。

(一個相關的問題:什麼是的getAuthToken()第二個參數「啊」,「郵件」???)

所以,雖然我繼續讀書,源代碼等崗位顯示怎麼辦困難的事情困難的方式,有人可以告訴我如何輕鬆做一件容易的事情嗎?

回答

1

線程「validating Android's authToken on third party server」回答了子命題「打什麼簡單的URI來測試令牌?」

神奇的URI,對於谷歌來說是:https://accounts.google.com/o/oauth2/tokeninfo?access_token=%token_here%

下一個問題是如何撲通訪問令牌出getAuthToken的。範圍也應該是最低的可以顯示用戶真正住在這裏:

String SCOPE = "oauth2:https://www.googleapis.com/auth/userinfo.profile"; 
am.getAuthToken(a, SCOPE, false, this, null); 

this類實現AccountManagerCallback<Bundle>並提供方法run(AccountManagerFuture<Bundle> result)。根據文檔(如「Android AccountManagerFuture getResult gives IOEXcelption when trying to get authorization token」),可能會調用startActivity()質疑用戶授權此活動,或者它可能使用已存儲在AccountManager中的令牌。 (並且注意,實現一個類只是爲了回覆自己是有害的,特別是如果目標方法的名字只是run(),所以如我所說不像我這樣做,孩子們!)

結果令牌長52字節,以'ya29。'開頭,所以它可能是一個access_token,而不是331個字符,可能是一個id_token。

結果令牌沒有綁定到任何特定的通道(其中「通道」是一組唯一的客戶端,服務器和範圍)。所以,從一個簡單的捲曲,我可以打的/tokeninfo URI有了它,並得到這個(淨化的)JSONic智慧:

{ 
    "issued_to" : "442575845966-mde4be7eingpb5pntfs839jipsetro6s.apps.googleusercontent.com", 
    "audience" : "424242424242-mde4ab7defghi5jklmn839opqrstuv6s.apps.googleusercontent.com", 
    "user_id" : "424242424242424242424", 
    "scope" : "https://www.googleapis.com/auth/userinfo.profile", 
    "expires_in" : 2272 
} 

所以這個答案就已經形成了,對我來說,缺少的環節所有其他之間我正在嘗試閱讀的文檔。 Aaand現在我需要再次爲Facebook做這一切& Twitter ...

0

有一個簡單的URL。 每個authtoken都是針對範圍授予的。每個範圍允許authtoken做某些事情。如果你試圖做一些範圍允許的事情,那麼基於authtoken的有效性,這個事情將失敗或成功。

最簡單的請求範圍可能是'電子郵件'。

如果你去了Oauth2遊樂場https://developers.google.com/oauthplayground/你可以嘗試使用範圍和調用來獲得適合你的範圍和調用。您將能夠看到您需要在應用中複製的網址。

+0

oauthplayground範圍原來只是低的https://www.googleapis.com/auth/userinfo.profile。 TX。我現在將寫出如何使用它來獲得access_token。 (我之前獲得了id_token,這是特定於頻道的。) – Phlip

相關問題