我有興趣創建一個應該擁有自己的忠實用戶羣的跨平臺Web應用程序(如任何好的應用程序)。跨平臺應用程序:Android +自定義REST後端(Yii2)+第三方SSO提供商登錄(Google+)
後端由Yii2框架(PHP)提供支持,並公開需要用戶驗證的多個REST端點(oAuth2訪問令牌)。用戶可以通過調用專用的「登錄」API端點來獲得訪問令牌,這是一個很容易的部分,與此問題無關。
我的應用程序的網絡版本還允許用戶通過外部SSO(例如Google+)登錄,這會導致用戶在內部用戶數據庫中自動創建(還連接到外部Google ID,因此後續的SSO請求同一個用戶導致同一個「內部」用戶自動登錄)。
這適用於Web + REST API對,但是,當我們將Android帶入圖片的事情開始變得複雜時。
Android應用程序能夠向用戶提供通過標準Android SDK通過他的Google+個人資料登錄的選項,並且我們能夠以這種方式檢索他的Google身份。然而,問題在於 - 如何安全地交換Android應用所具有的Google身份,以及由REST API發出的訪問令牌,而不詢問用戶在我們內部數據庫中的用戶名和密碼(密碼是在第一個SSO期間自動生成的登錄,所以最終用戶永遠不會知道他的密碼,他只使用SSO登錄Web和移動平臺)。這裏的關鍵字是「安全」的,因爲如果我們只相信Android應用程序正確地對用戶進行身份驗證並以某種方式將Android應用程序和REST終端之間的通信「白名單」(例如,通過只有Android應用程序知道的「服務訪問令牌」 ),潛在的黑客可以逆向工程或嗅探兩者之間的通信,並可以直接調用REST端點,使用相同的可信訪問令牌來標識自己。實際上,爲任何隨機用戶獲取訪問令牌。