如何在Reactjs前端存储JWT Secret?

时间:2019-12-19 08:06:09

标签: node.js reactjs express jwt jwt-auth

我不是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 个答案:

答案 0 :(得分:1)

您可以将其存储在主要组件状态,Redux存储,React Context,本地存储等中。

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

答案 1 :(得分:1)

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

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

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

或者,如果您想不使用包进行解码,则可以查看here