簡體   English   中英

是否可以從AccountManager獲取身份驗證令牌而不觸發“權限請求”對話框?

[英]Is it possible to get an auth token from AccountManager without triggering the “Permission request” dialog?

我正在開發一個客戶端 - 服務器應用程序,並希望為用戶提供單點登錄,以便他們可以使用Google登錄。 我打算通過使用AccountManager在手機上獲取訪問令牌,然后將此令牌發送到服務器以驗證令牌並登錄用戶來實現此目的。

當我在AccountManager中調用方法getAuthToken時,會顯示一個對話框,其中用戶必須允許此操作,但Android上的Chrome允許您登錄並將您的瀏覽器數據與您的Google帳戶同步,而不會顯示此對話框。 因此,Chrome似乎能夠獲取訪問令牌而不向用戶顯示任何對話框,如果我可以對我的應用程序執行相同操作,那將非常好。

在查看Android的源代碼和getAuthToken實現時,如果應用程序是預安裝的應用程序,或者應用程序UID與(Google帳戶的)身份驗證器的UID相同,則似乎會自動授予訪問權限。

我的應用和Chrome都沒有預先安裝,因此在這兩種情況下檢查都是錯誤的。 我的應用程序當然不能與Google帳戶身份驗證器共享UID,並且我認為Chrome可能會與身份驗證器共享UID,因為Google創建了這兩者。 如果是這種情況,則可以解釋為什么Chrome不會顯示任何對話框。

在請求我可能缺少的訪問令牌時,是否有其他方法未向用戶顯示此對話框?

不,這是不可能的

在仔細閱讀Android源代碼之后,我看到方法hasAuthenticatorUid()不僅在UID相同時返回true,而且如果應用程序簽名時使用與簽名者簽名相同的簽名。

要驗證Chrome的情況,我在Chrome apk文件中使用了android-apktool ,以便能夠查看Chrome的manifest.xml。 在那里,我可以看到Chrome不使用與身份驗證器共享的UID。

之后,我用自己的調試密鑰重新簽名了Chrome apk,並在我的手機上安裝了apk。 當我這樣做並嘗試登錄Chrome時,我收到了幾個“權限請求”對話框。

因此,很明顯Chrome和驗證者使用相同的密鑰簽名,這就是Chrome可以自動獲取其他第三方應用無法獲取的權限的方式。

因此,第三方應用程序無法獲取Google帳戶的令牌,而無需向用戶請求權限請求權限,這畢竟是一件非常好的事情。 我不希望手機上的任何隨機應用程序能夠在我不知情的情況下訪問我的帳戶。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM