![](/img/trans.png)
[英]Should I verify the OAuth2 token in the Android client or will App Engine itself authenticate user based on the credential passed to the backend API?
[英]Verify Gmail OAuth2 token and client spoof
我遵循此示例,以便允许用户使用他的Google帐户在远程服务器上登录。
基本上,我在客户端中获取了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": "user@mail.com",
"verified_email": true,
"access_type": "online"
}
因此,对于发出的验证,也许issue_to或Audience字段很重要?
编辑:我不是在中间攻击的意思。 例如,假设我创建了一个名为VirusX的游戏,该游戏允许gmail登录。 如果没有进行额外的验证,我可以保存access_tokens并使用它们通过gmail登录访问其他应用程序。
使用facebook API可以通过以下方式解决:
Invalid OAuth access token signature
有人可以欺骗的唯一方法是中间人攻击和DNS攻击。 除非您预计会出现严重违规行为,否则请不要理会。 如果您遵循简单的安全措施,那么就很难击败OAuth提供者(身份管理他们的工作!)。 正如britzl所说,请按照本教程进行操作,然后完成代码。
tokeninfo
端点很可能正在为您验证令牌。 只要您使用HTTPS与之通信,就可能很安全。 您也可以自己解压缩和解析令牌,虽然有一些库,但这实际上很容易。 见这里表格一些细节 。 您应该真正看一下上面建议的“验证后端调用”链接,它功能更强大,不仅可以验证用户,而且可以验证请求是否来自您自己的应用程序(尽管有多种方法可将其愚弄到已植根的设备上)。
对于已编辑的问题:
令牌已签名,因此您可以对其进行验证。 如果验证失败,则表明令牌已被篡改,您不应信任它(Google tokeninfo
端点tokeninfo
)。 它也有一个有效时间,因此您可以检查它是否过期。 因此,如果有人可以访问令牌并将其发送到您的服务(重播),则他们只能在有限的时间(通常为30至60分钟)内使用令牌。 如果您使用后端验证技术,则还可以通过验证程序包名称和签署证书哈希来确保令牌来自您的应用程序而不是病毒X,您必须提前注册。 请阅读它的工作原理,并使用它代替“原始”配置文件令牌。
通常,带有承载类型的令牌就像Cookie一样-如果您拥有令牌,则无法区分原始所有者和偷窃者。 缓解因素是令牌可以被吊销并且其有效时间有限。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.