在 Chrome 扩展程序中安全地存储 Django REST API 令牌

Posted

技术标签:

【中文标题】在 Chrome 扩展程序中安全地存储 Django REST API 令牌【英文标题】:Securely storing Django REST API token in Chrome extension 【发布时间】:2017-08-15 07:11:33 【问题描述】:

我正在制作一个 Chrome 扩展程序,它应该允许用户在弹出界面中输入他们的用户名和密码,通过 AJAX 将它们发布到服务器,并接收一个 Django REST API 令牌,Chrome 扩展程序可以使用该令牌进行交互使用 Django 应用程序(获取用户信息、创建新记录等 - 所以它应该是安全的)。

现在我已经让 Chrome 扩展程序发出请求并接收 API 令牌,但我正在努力解决如何安全地存储 API 令牌。

我知道 chrome.storage 已失效,因为文档说它不安全。可以在这里使用cookies吗?扩展需要在多个域上运行,所以我不确定是否可以安全地使用 cookie。

我不想要求用户在每次使用 Chrome 时都登录,但我不确定如何存储 API 数据。

【问题讨论】:

【参考方案1】:

你应该使用chrome.identity:

开发人员可以利用 chrome.identity API 来存储用户凭据。 Chrome 扩展程序通常向外部资源发出 API 请求。最佳实践是存储 OAuth API 令牌。此类令牌可以在没有用户名/密码的情况下代表用户执行授权请求,并且可以由用户随时撤销。

Chrome API 提供 chrome.identity 服务,该服务为扩展提供了一种安全的方式来验证、获取和刷新令牌。此 API 使用户能够针对第三方服务执行身份验证。 Chrome 可以交互地显示一个弹出式 UI,其中:

这是official docs。

【讨论】:

【参考方案2】:

Chrome 不允许扩展程序修改/处理 cookie。

在documentation 中写道:“使用 Chrome 身份 API 来验证用户身份:getAuthToken 用于登录 Google 帐户的用户,launchWebAuthFlow 用于登录用户进入非 Google 帐户。如果您的应用使用自己的服务器对用户进行身份验证,则需要使用后者"

您可以找到有关非 Google 帐户 here 的文档。

您可以将令牌存储在只能由您的扩展程序访问的本地存储中,但请注意,它没有加密,可以通过 Chrome 的开发工具查看。

【讨论】:

以上是关于在 Chrome 扩展程序中安全地存储 Django REST API 令牌的主要内容,如果未能解决你的问题,请参考以下文章

Chrome 扩展:比特币钱包

Google Chrome扩展程序与安全网站交互

chrome扩展开发中contentscript问题求助

Chrome 扩展程序是不是可以访问本地存储?

如何在 Chrome 扩展程序中禁用同源策略?

Chrome在哪里存储使用Windows 7上的Amazon-Cloud Extension下载的离线图书?