我下面,以允许用户使用谷歌自己的帐户登录,在远程服务器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