Google+ 服务器端令牌验证

Google+ Server Side Token Validation

我在我的应用程序中使用 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 是否安全?

我认为文档说不要将访问令牌用作网络应用程序的 GET 参数,因为大多数网络服务器将记录在不受保护的位置访问的 URLs,除非它被专门配置为不这样做它。因此,如果您向后端服务器发出 AJAX 请求,则用户的访问令牌将暴露在 Web 服务器日志中。

使用 tokeninfo 端点应该没问题,因为 Google 进行日志记录并将处理日志的安全性。 HTTPS 保护请求 URL 和消息,因此使用访问令牌作为 GET 参数没有特别的问题。

将 HTTP 请求中的访问令牌发送到 您的 服务器与将其发送到 Google 之间存在差异'服务器。

将访问令牌发送到 Google 的 tokeninfo 端点进行验证时,可以将其作为查询参数发送,因为它通过 HTTPS 运行并且 Google 是访问令牌的颁发者首先,您要将其发送到已知且受控的环境中。 Google 假定 Google 知道它在做什么。

但是当从客户端向你的服务器发送访问令牌时(并且你必须确保你无论如何使用HTTPs)将它作为查询参数传递是不太安全的,因为它可能会结束在服务器端的日志和流量分析数据中。例如,在客户端和服务器之间有代理或者您正在使用网络托管的情况。

最重要的是,针对支持 OAuth 2.0 的系统的复杂攻击利用了带有标记的查询参数最终出现在 LocationReferer headers 中这一事实。最好避免暴露于任何此类漏洞的可能性。要对这些攻击有一个很好的印象,请参阅 http://www.oauthsecurity.com/ 尤其是关于开放重定向的部分。