【问题标题】:How to safely & properly storing JWT token in Electron App如何在 Electron App 中安全、正确地存储 JWT 令牌
【发布时间】:2019-10-10 04:24:33
【问题描述】:

我正在构建一个电子桌面应用程序,在该应用程序中它将使用 JWT 令牌调用远程 API。但是,在没有 XSS、CSRF、中间人攻击等威胁的情况下,我应该在哪里安全地保存这个 JWT 令牌......并且其他应用程序无法访问

我尝试过使用node-keytar 包,它使用从用户登录中派生的加密密钥。

但是根据这个问题(https://github.com/atom/node-keytar/issues/88),如果用户的环境安装了恶意软件,凭证(在我们的场景中为 JWT)仍然可能被破坏。

node-keytar 的代码比较简单,这里是添加秘钥

keytar.addPassword('KeytarTest', 'AccountName', 'secret');

这是获取秘诀

const secret = keytar.getPassword('KeytarTest', 'AccountName');
console.log(secret); // "supersecret"

我正在考虑将 JWT 存储到内存中可能是最安全的方式,但需要用户在每次重新打开电子桌面应用程序时重新登录并获取 JWT 令牌。 欢迎任何建议或想法。谢谢!

【问题讨论】:

    标签: jwt electron


    【解决方案1】:

    在许多涉及 JWT 的用例中,您不必在将 JWT 发送到 API 之前对其进行任何额外的加密/混淆,因为:

    • 当您将 JWT 发送到 API 时,您将通过 SSL 或 HTTPS 执行此操作,这会加密整个有效负载。从理论上讲,这将消除大多数中间人攻击的可能性。
    • 即使有人设法嗅探您的 JWT 令牌,他们也会缺少解锁它所需的服务器密钥。此外,即使他们设法解锁了 JWT,也几乎不可能在不更改校验和的情况下更改其内容,校验和包含在 JWT 本身中。这通过在 JWT 中插入一些东西来消除注入攻击的机会。

    所以总的来说,JWT 模式是一种将服务器端会话状态推送到应用程序之外的方式。它以这样一种方式做到这一点,即这种状态不受外界篡改。如果 可以在外部轻松篡改 JWT,那么整个模式就会崩溃。

    【讨论】:

    • 您好,感谢您的回复!但是如果他们获得了 JWT 令牌,他们可以直接使用该令牌来访问某些 api 端点而不会篡改它而且假设客户端的操作系统充满了恶意软件,我如何安全地将 JWT 令牌保存在电子应用程序中当用户什么都不做时。(排除中间人攻击的上下文)
    • @johnhckuo 您的评论现在提到了 JWT 的另一个潜在问题,即如果有人恶意获取它,他们可以窃取您的身份。但是,这个问题实际上与您以外的其他人可能窃取您的护照或信用卡的风险没有什么不同。这只是一种无法完全缓解的风险。唯一完全安全的方法是要求用户在每次操作时都输入他的凭据。但是,这是不切实际的,原因很明显。
    • @TimBiegeleisen 但这就是问题所在。如何以及在何处存储 JWT 以防止此类身份盗用。
    猜你喜欢
    • 2020-12-21
    • 2021-09-26
    • 2019-02-20
    • 2020-08-22
    • 2018-07-20
    • 2021-09-23
    • 1970-01-01
    • 2022-11-20
    • 2012-09-11
    相关资源
    最近更新 更多