目前,我有一个后端,可以通过此简单功能验证访问令牌:
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?这样安全吗?
答案 0 :(得分:4)
您不应在客户端存储JWT机密。将其存储在客户端并不安全。
而且您在客户端不需要JWT机密。
您可以使用jwt-decode包在客户端解码令牌。
或者,如果您想不使用包进行解码,则可以查看here。
要保护React中的路由,您可以按照answer中的描述创建一个ProtectedRoute组件。
最好的做法是在短时间内生成令牌。
答案 1 :(得分:1)
我认为,正如您所说的,最好在后端有一条路由来检查用户是否被授权。因为,如文档所述,在您的React应用程序中存储api密钥和类似内容并不安全。
来自create-react-app documentation:
警告:请勿在您的计算机中存储任何机密信息(例如私有API密钥) 反应应用程序!
环境变量被嵌入到构建中,这意味着任何人都可以 通过检查应用程序的文件来查看它们。