我有一个与Google服务集成的应用程序(具体来说是Google Bigquery API。)
我正在客户端上验证用户身份,没有脱机访问范围(因此没有刷新令牌),并且在客户端上执行了大多数操作。但是我想在服务器端执行一些操作(仍然代表经过身份验证的用户)。
当前,我正在将访问令牌(通过https)传递到服务器端,使用此令牌初始化服务器端的Google库,并在那里进行操作。
我在Google上找到的与此相关的文档要么在服务器端使用身份验证,并带有刷新令牌,要么完全在客户端使用。找不到有关此混合案例的最佳做法的文档。
简而言之,我想做的是使用后端在客户端获取的短暂访问令牌。
此方法是否存在安全风险?不管怎么说,这是我想要做的建议方法吗?
答案 0 :(得分:0)
无论BigQuery oAuth2实现如何,市场上一般的安全性最佳做法是仅在客户端存储短期安全性令牌。甚至这可能是一个挑战,具体取决于您的客户端安全技术和框架。
OAuth 2.0 Authorization Framework: Bearer Token Usage官方的两个要点
令牌存储
不要将承载令牌存储在cookie中:实现不得存储 Cookie中的承载令牌可以以明文形式发送( 是Cookie的默认传输模式)。实作 将承载令牌存储在cookie中的必须采取预防措施 防止跨站点伪造。
短期令牌
发布短期的承载令牌:令牌服务器应该发布 短期(一小时或更短)的承载令牌,尤其是当 向在Web浏览器或其他浏览器中运行的客户端发行令牌 可能发生信息泄漏的环境。使用 短期持有者代币可以减少它们的影响 泄漏。
现在在此link
中查看Bigquery文档他们的建议是:将刷新令牌保存在安全的长期存储中,这通常在客户端存储框架上没有完成。
由于您总是从BigQuery oAuth2 API获得刷新令牌,因此可以在服务器端完成的所有API调用中使用它,从而为用户提供了无缝的安全流程。在google oauthplayground
中进行检查BTW:通常从客户端进行呼叫是出于性能方面的考虑,在BigQuery案例中,由于这是一种大数据解决方案,因此我认为服务器端呼叫所涉及的额外几秒钟不太重要