2013-05-03 61 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所说,按照教程,你的代码完成了。