2013-01-03 93 views
4

當通過Google身份驗證器登錄時,每個應用程序(uid)的每個帳戶都會提示一次允許訪問屏幕(GrantPermissionActivity),但未記錄在何處可以選擇讓該屏幕顯示爲自定義第3個第三方認證者。Android自定義身份驗證器允許訪問屏幕

任何人都知道是否有這樣做嗎?

我試圖插入一個自定義檢查並模仿GrantPermissionActivity,但問題是AuthToken被緩存,所以我無法弄清楚如何在第三方應用程序上執行此操作,因爲getAuthToken只需傳遞自定義代碼與令牌緩存。

注意,這是不一樣的問題:How do you force AccountManager to show the "Access Request" screen after a user has already allowed access?

回答

2

我想我已經想出了一個非常好的解決方案,但這可能不是谷歌允許屏幕的工作方式。

在Authenticator中,您將獲得調用包,由於AccountManager驗證應用程序的UID/PID,因此不會被欺騙。您使用調用包作爲令牌類型的一部分以及應用程序的安裝日期(可選,可以使用包管理器找到),這樣每個應用程序的令牌就會分開緩存。

如果令牌類型不包含包名稱作爲調用包,則不會返回令牌。

對於每個認證令牌類型,您還會驗證客戶端密鑰是否考慮客戶端密鑰。如果這是客戶首次爲每個自定義帳戶類型的每個帳戶請求密鑰,那麼您將只返回「允許訪問」屏幕意圖。

請注意,如果您想要白名單應用程序,您也可以在每個帳戶令牌類型的基礎上進行。

1

我沒有給你一個完整的答案,但也許我可以幫你的方式有點。

在查看getAuthToken實現時,您可以看到如果身份驗證器正在使用customTokens,則會自動授予權限。如果使用自定義標記,AuthenticationDescription的文檔還提到「Authenticator處理自己的標記緩存和權限屏幕」。所以,如果這是你的情況,我不認爲有可能讓這個屏幕出現。

我試圖插入自定義檢查和模仿GrantPermissionActivity,但問題是,的authToken緩存...

如果用invalidateAuthToken無效令牌應該從緩存中被清除。只要記住將想要無效的令牌傳遞給該方法(請參閱AccountManager: invalidateAuthToken does not invalidate the token)。

相關問題