【问题标题】:Google+ Server Side Token ValidationGoogle+ 服务器端令牌验证
【发布时间】:2015-03-03 11:59:28
【问题描述】:

我在我的应用程序中使用 Google+ 登录。用户得到一个 access_token ,我想将该令牌传递给我的服务器并用谷歌验证它。让我感到困惑的是谷歌文档中关于此安全性的相互矛盾的信息:

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 是否安全?

【问题讨论】:

    标签: oauth oauth-2.0 google-plus google-oauth


    【解决方案1】:

    将 HTTP 请求中的访问令牌发送到 您的 服务器与将其发送到 Google 的服务器是不同的。

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2023-01-12
        • 2017-10-30
        • 1970-01-01
        • 1970-01-01
        • 2022-08-16
        • 2017-12-28
        • 2012-12-08
        • 2012-06-05
        • 2017-07-23
        相关资源
        最近更新 更多