我下面,以允許用戶使用谷歌自己的帳戶登錄,在遠程服務器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也就迎刃而解了這種方式:
- 你問使用您的FACEBOOK_APP_ID令牌(在Facebook SDK驗證應用的簽名)在
- 用戶登錄,你會得到的access_token和發送到服務器
- 服務器檢索USER_ID打電話給https://graph.facebook.com/me?access_token=XXXXX
- 然後服務器調用https://graph.facebook.com/USER_ID?access_token=FACEBOOK_APP_ID|FACEBOOK_SECRET
- 此時如果令牌不是你的一個FACEBOOK_APP_ID檢索(祕密將不匹配),您將收到一條
Invalid OAuth access token signature
感謝您的回答,但並不完全是我的意思。請檢查已編輯的問題 – Addev 2013-05-08 10:47:32
請參閱已編輯的答案。 – 2013-05-08 13:29:24