我在我的应用程序中使用Google+登录。用户返回access_token,我想将该令牌传递给我的服务器并使用google进行验证。让我感到困惑的是google文档中关于此安全性的相互矛盾的信息:
https://developers.google.com/accounts/docs/OAuth2UserAgent#validatetoken
说我可以使用access_token进行ajax调用,以检查它是否是有效的令牌。但是,这对我来说很好,
https://developers.google.com/+/web/signin/client-to-server-flow
表示永远不要将access_token作为http请求中的参数发送到我的服务器。
那么,使用https://www.googleapis.com/oauth2/v1/tokeninfo
是否安全?
答案 0 :(得分:2)
将HTTP请求中的访问令牌发送到您的服务器并将其发送到 Google 的服务器之间存在差异。
将访问令牌发送到Google的tokeninfo端点进行验证时,可以将其作为查询参数发送,因为它在HTTP上运行,Google首先是访问令牌的发布者,因此您将其发送到已知和受控制的环境中。谷歌假设谷歌知道它在做什么。
但是当从客户端向您的服务器发送访问令牌(并且您必须确保使用HTTP)时,将其作为查询参数传递则不太安全,因为它可能最终会出现在日志和流量中分析服务器端的数据。例如,在客户端和服务器之间有代理,或者您正在使用Web托管。
最重要的是,针对启用了OAuth 2.0的系统进行了复杂的攻击,利用了带有令牌的查询参数最终位于Location
和Referer
标头中的事实。最好避免暴露于任何类似漏洞的可能性。要获得对这些攻击的良好印象,请参阅http://www.oauthsecurity.com/,尤其是有关打开重定向的部分。
答案 1 :(得分:0)
我认为文档说不使用访问令牌作为Web应用程序的GET参数,因为大多数Web服务器都会记录在不受保护的位置访问的URL,除非它专门配置为不执行此操作。因此,如果您向后端服务器发出了AJAX请求,则用户的访问令牌将在Web服务器日志中公开。
使用tokeninfo
端点应该没问题,因为Google会执行日志记录并处理日志的安全性。 HTTPS保护请求URL和消息,因此使用访问令牌作为GET参数没有特别的顾虑。