当前位置: 首页 > 知识库问答 >
问题:

如何在Reactjs前端存储JWT秘密?

白永昌
2023-03-14

我是JWT的新手,对反应并不陌生,但对如何从前端解码JWT感到非常困惑。我最初认为我可以将JWT Secret存储在. env文件中,但许多消息来源说这样做是一个非常糟糕的主意。我有后端设置,可以在您登录时向我发送JWT。但是如果不将密钥存储在前端,我将如何解码信息?

后端:

if(bcrypt.compareSync(ctx.params.password, hashed_db_password)) {
                            ctx.status = 200;
                            const payload = { data: tuples[0] };
                            const options = { expiresIn: '1h', issuer: 'testIssuer'};
                            const secret = process.env.JWT_SECRET;
                            const token = jwt.sign(payload, secret, options);
                            ctx.body = token;
                            return resolve();
}

我认为前端应该是:

let data = JWT.verify(result.data, process.env.REACT_APP_JWT_SECRET, options);

我也读过很多关于后端应该进行验证的文章,但这难道不是一个巨大的安全风险,需要进行验证,然后返回不安全的原始用户信息吗?如有任何信息,将不胜感激。

顺便说一句,我使用的是Reactjs,Node。js、Express和MySql

共有2个答案

乐正德华
2023-03-14

您可以将其存储在主组件状态、Redux存储、React上下文、localstorage等中。。

只有当您的身份验证成功时,您才应该获得JWT,并且您应该将它与每个请求一起发送到服务器,您不需要在前端对其进行解码,您只需将编码值传递给服务器并在后端的某个地方对其进行解码(某种中间件)

盖成弘
2023-03-14

您不应该在客户端存储JWT机密。

要解码令牌,您不需要JWT秘密。

您可以使用jwt-decode包解码令牌。

或者,如果您想在不使用软件包的情况下解码,您可以查看这里。

 类似资料:
  • 我是JWT新手,我只是将其作为JSON中的java对象返回,并制作了一些过滤器,以便它可以像Spring Security中的session_id一样工作。 但是我不明白JWT是如何存储在客户端的,在服务器响应之后它会去哪里?它是否由coockies中的所有浏览器自动存储?所有浏览器都支持JWT吗? 我很感激你的回答。

  • 我目前正在使用ReactJS构建一个单页应用程序。 我读到不使用的原因之一是因为XSS漏洞。 由于 React 会转义所有用户输入,现在使用 是否安全?

  • 我第一次使用JSON Web令牌(JWT)。我正在制作一个节点。js应用程序。我想使用JWT进行身份验证。根据文档,我将JSON令牌返回到前端。 但是我不知道如何将这个JSON令牌保存到我的浏览器头中,这样它就不会丢失,并随头一起再次发送到后端。如何将它保存在我的浏览器存储中,并在每次向后端发送请求时将其添加到请求头中?

  • 问题内容: 我目前正在使用reactjs构建一个单页面应用程序。我读到许多不使用localStorage的原因是由于XSS漏洞。由于React避开了所有用户输入,现在使用localStorage是否安全? 问题答案: 在大多数现代单页应用程序中,我们确实必须将令牌存储在客户端的某个位置(最常见的用例-在页面刷新后使用户保持登录状态)。 共有2个可用选项:Web存储(会话存储,本地存储)和客户端co

  • 我正在用Django和angular构建一个应用程序。目前,我正在本地存储上存储后端发布的JWT。但是,我担心XSS攻击。我应该使用仅HTTP cookie存储令牌吗?我还考虑将令牌存储在auth服务类的变量字段中。但我不能完全确定angular是否在整个应用程序中共享该服务。我的身份验证服务是否只有一个实例?