【问题标题】:Passing Google access token from client to server将 Google 访问令牌从客户端传递到服务器
【发布时间】:2019-09-06 13:51:51
【问题描述】:

我有一个与 Google 服务集成的应用程序(具体来说是 Google Bigquery API。)

我在客户端对用户进行身份验证,没有离线访问范围(因此没有刷新令牌),并且在客户端执行大部分操作。但是我想在服务器端执行一些操作(仍然代表经过身份验证的用户。)

目前,我正在将访问令牌传递到服务器端(通过 https),使用此令牌在服务器端初始化 Google 库,并在那里执行操作。

我在 Google 上找到的有关这方面的文档要么在服务器端使用身份验证,要么使用刷新令牌,要么完全在客户端。找不到针对这种混合情况提出最佳做法的文档。

简而言之,我想做的是,在后端使用在客户端获取的短期访问令牌。

这种方法是否存在任何安全风险?不管怎样,这是做我想做的事情的建议方式吗?

【问题讨论】:

  • 嗨@Ozgur,我觉得这是一个有点离题的问题,也是一个非常笼统的安全问题,不一定与 BigQuery 相关。说作为一个拇指滚动,我总是建议/更喜欢在服务器端存储一个令牌并使用服务器端逻辑,因为出于许多原因这更安全。
  • @TamirKlein 非常感谢您的反馈。我通常也会在后端存储一个令牌,但这需要从用户那里获得离线访问权限,这是我不想要的。这就是我尝试使用在客户端获取的令牌的原因。

标签: google-cloud-platform google-bigquery google-python-api


【解决方案1】:

无论 BigQuery oAuth2 实施如何,市场通用的安全最佳做法是仅在客户端存储短期安全令牌。根据您的客户端安全技术和框架,即使这也可能是一个挑战。

来自官方OAuth 2.0 Authorization Framework: Bearer Token Usage的两个重点

令牌存储

不要在 cookie 中存储不记名令牌:实现不得存储 cookie 中可以明文发送的不记名令牌(其中 是 cookie 的默认传输模式)。实现 将不记名令牌存储在 cookie 中的必须采取预防措施 防止跨站请求伪造。

短期代币

发行短期不记名令牌:令牌服务器应该发行 短期(一小时或更短)不记名令牌,尤其是在 向在 Web 浏览器或其他设备中运行的客户端发出令牌 可能发生信息泄露的环境。使用 短暂的不记名令牌可以减少它们的影响 泄露了。

现在检查此 link 中的 Bigquery 文档

他们的建议是:将刷新令牌保存在安全的长期存储中,这通常不会在客户端存储框架上完成。

由于您总是从 BigQuery oAuth2 API 获得刷新令牌,因此您可以在所有 API 调用中使用它,在服务器端完成,从而为用户提供无缝的安全流程。在google oauthplayground查看这个

顺便说一句:通常从客户端进行调用是出于性能原因,在 BigQuery 的情况下,因为它是一个大数据解决方案,我觉得额外的几秒钟涉及服务器端调用不太重要

【讨论】:

  • 我会再次检查,但 AFAIK,应用程序不会收到刷新令牌,除非它们请求离线访问权限
  • 我在回答中添加了更多细节。无论如何,我认为您不应该在客户端存储刷新令牌/长期访问详细信息,希望这对您有意义
  • 嗨@OzgurAkcali,想知道我的回答是否对您有任何帮助?
猜你喜欢
  • 2013-02-03
  • 2017-08-13
  • 1970-01-01
  • 1970-01-01
  • 2013-05-07
  • 1970-01-01
  • 1970-01-01
  • 2012-02-22
  • 1970-01-01
相关资源
最近更新 更多