2013-05-03 119 views
0

我下面,以允許用戶使用谷歌自己的帳戶登錄,在遠程服務器THIS例子。驗證Gmail中的OAuth2令牌和客戶端惡搞

基本上,我得到了在的access_token客戶端,並將其發送到我的服務器。在服務器我檢查

https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=XXXX 

獲得用戶的電子郵件,並在服務器驗證它的響應。

但是我有一個安全問題,如果惡意開發者創造什麼一個應用程序,允許Gmail登錄信息,存儲用戶的訪問令牌,並用它們來欺騙自己的身份,我的服務器?我怎樣才能避免這種情況?有沒有驗證獲得訪問令牌的應用程序簽名的方法?

返回的標記信息是這樣的:

{ 
    "issued_to": "XXXXXXXXXXXXXX.apps.googleusercontent.com", 
    "audience": "XXXXXXXXXX.apps.googleusercontent.com", 
    "user_id": "15285874285447", 
    "scope": "https://www.googleapis.com/auth/plus.me https://www.googleapis.com/auth/userinfo.email", 
    "expires_in": 3562, 
    "email": "[email protected]", 
    "verified_email": true, 
    "access_type": "online" 
} 

所以可能ISSUED_TO或觀衆的字段是爲驗證重要?

編輯:我沒有意思的中間人攻擊。例如,假設我創建了一個名爲VirusX的遊戲,它允許Gmail登錄。如果沒有額外的驗證,我可以保存access_tokens並使用它們訪問使用gmail登錄的其他應用程序。

使用Facebook的API也就迎刃而解了這種方式:

回答

1

tokeninfo端點最有可能驗證你的令牌。只要你使用HTTPS與它通信,你可能是安全的。你也可以自己解開和解析令牌,這裏有一些庫,但實際上它很容易。看到這裏形成一些details。你應該看看上面建議的驗證後端調用鏈接,它的功能更強大,並且可以讓你不僅驗證用戶,而且驗證請求來自你自己的應用程序(儘管有根用戶的設備可以欺騙它)。

對於編輯的問題:

令牌進行簽名,這樣你就可以驗證它。如果驗證失敗,令牌已被篡改,您不應該相信它(Google端點tokeninfo會這樣做)。它也有一個有效期,所以你可以檢查它是否過期。因此,如果有人訪問令牌並將其發送給您的服務(重播),他們只能在有限的時間內使用它(通常爲30-60分鐘)。如果您使用後端驗證技術,它還可以通過驗證您的軟件包名稱和簽名證書哈希來確保該令牌來自您的應用程序,而不是病毒X,因此您必須提前註冊。請閱讀它的工作原理,並使用它來代替「原始」配置文件標記。

一般來說,使用持票人的類型令牌就像一個cookie--如果擁有它,就無法區分原始擁有者和偷走它的人。緩解因素是令牌可以被撤銷,並且其有效時間有限。

+0

感謝您的回答,但並不完全是我的意思。請檢查已編輯的問題 – Addev 2013-05-08 10:47:32

+0

請參閱已編輯的答案。 – 2013-05-08 13:29:24

1

我知道這並沒有真正回答你的問題,但我想就如何備用教程/範例使用Google帳戶登錄。我建議您使用Google Play服務和oAuth2查看此帖regarding how to verify backend calls。幾周前我們實現了這一點,並且這很容易。使用這種技術,任何人都無法欺騙訪問令牌。

1

有人能夠欺騙的唯一方法是通過人在中間和DNS攻擊。除非你預計會有極端的違規行爲,否則不要打擾。如果遵循簡單的安全措施,那麼擊敗OAuth提供者(身份管理他們的工作!)就太困難了。正如britzl所說,按照教程,你的代碼完成了。

相關問題