node-js 上的 Jwt 身份验证和 react -js

时间:2021-02-04 09:14:42

标签: node.js jwt

我正在研究基于 jwt 身份验证的项目,我想存储在用户登录请求中创建的令牌,但此令牌可以轻松解码,因此我必须将这些令牌存储在哪里?

//code to create token and cookie

const createToken=(id)=>{
return jwt.sign({id},secretkey);}

{....some code are written here.....}

const token= createToken(userid);
res.cookie('jwts',token,{httpOnly:true,maxAge:1000*60*60,sameSite:'lax'})

2 个答案:

答案 0 :(得分:1)

从您的问题来看,感觉您的 JWT 流程不清楚。令牌可以被解码 - 但它只会显示一些有效载荷数据和标头 - 不包含任何敏感数据。

Token的产生及说明: JWT 令牌由标题有效载荷签名组成。

标头是关于令牌本身的元数据。 有效载荷可以编码在令牌中,即数据,例如用户的 ID。 签名是使用标头、有效载荷和存储在服务器上的 SECRET 创建的。此过程称为签名。这个“秘密”有助于我们验证签名的真实性。

那么,我们如何确保数据不被修改?

验证过程在服务器上完成,其中 JWT 的标头、有效负载和机密用于创建测试签名。此签名与原始签名(已存在于 JWT 中)匹配 - 则数据未被修改。 没有秘密 - 没有人可以操纵 JWT。也就是说,如果签名不匹配,验证将失败。

令牌存储: 关于是否将令牌存储在 cookieslocal-storage 中存在一些争论,因为两者都容易受到黑客攻击。

登录流程:

  • 客户端向服务器发送请求(POST - 登录)。
  • 如果提供的凭据有效,服务器会验证用户并返回 JWT 令牌作为响应。
  • JWT 令牌存储在 localStorage / cookie 中,具体取决于首选选项(我更喜欢 localStorage)。

答案 1 :(得分:0)

您需要将该令牌与来自客户端的 API 请求一起发送。我曾经存储在客户端的内部存储中,并且曾经为每个 API 调用发送该令牌。

相关问题