我正在研究基于 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'})
答案 0 :(得分:1)
从您的问题来看,感觉您的 JWT 流程不清楚。令牌可以被解码 - 但它只会显示一些有效载荷数据和标头 - 不包含任何敏感数据。
Token的产生及说明: JWT 令牌由标题、有效载荷和签名组成。
标头是关于令牌本身的元数据。 有效载荷可以编码在令牌中,即数据,例如用户的 ID。 签名是使用标头、有效载荷和存储在服务器上的 SECRET 创建的。此过程称为签名。这个“秘密”有助于我们验证签名的真实性。
那么,我们如何确保数据不被修改?
验证过程在服务器上完成,其中 JWT 的标头、有效负载和机密用于创建测试签名。此签名与原始签名(已存在于 JWT 中)匹配 - 则数据未被修改。 没有秘密 - 没有人可以操纵 JWT。也就是说,如果签名不匹配,验证将失败。
令牌存储: 关于是否将令牌存储在 cookies 或 local-storage 中存在一些争论,因为两者都容易受到黑客攻击。
登录流程:
答案 1 :(得分:0)
您需要将该令牌与来自客户端的 API 请求一起发送。我曾经存储在客户端的内部存储中,并且曾经为每个 API 调用发送该令牌。