如何在React端验证访问令牌?危险吗?

时间:2019-12-29 10:37:19

标签: reactjs jwt jwt-auth

目前,我有一个后端,可以通过此简单功能验证访问令牌:

const { verify } = require("jsonwebtoken");

const isAuth = req => {
  const authorization = req.headers["authorization"];
  if (!authorization) throw new Error("You need to login");

  const token = authorization.split(" ")[1]; //Bearer token123123jjjjasd , we get the token value
  const { userId } = verify(token, process.env.ACCESS_TOKEN_SECRET);
  return userId;
};

module.exports = {
  isAuth
};

但是在正面这样做/做出反应以保护我的路线呢?将机密存储在我的前端不是很危险吗? 我应该在后端中创建一条验证路由,然后将访问令牌发送到那里,如果有效,则返回true,否则返回false?这样安全吗?

2 个答案:

答案 0 :(得分:4)

您不应在客户端存储JWT机密。将其存储在客户端并不安全。

而且您在客户端不需要JWT机密。

您可以使用jwt-decode包在客户端解码令牌。

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

要保护React中的路由,您可以按照answer中的描述创建一个ProtectedRoute组件。

最好的做法是在短时间内生成令牌。

答案 1 :(得分:1)

我认为,正如您所说的,最好在后端有一条路由来检查用户是否被授权。因为,如文档所述,在您的React应用程序中存储api密钥和类似内容并不安全。

来自create-react-app documentation

  

警告:请勿在您的计算机中存储任何机密信息(例如私有API密钥)   反应应用程序!

     

环境变量被嵌入到构建中,这意味着任何人都可以   通过检查应用程序的文件来查看它们。