2

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

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

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

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

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

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

4

1 回答 1

1

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

来自官方OAuth 2.0 授权框架的两个要点: Bearer Token Usage

代币存储

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

短期代币

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

现在检查此链接中的 Bigquery 文档

在此处输入图像描述

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

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

在此处输入图像描述

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

于 2019-04-20T12:40:21.667 回答