繁体   English   中英

Jwt 在 node-js 和 react -js 上进行身份验证

[英]Jwt authentication on node-js and react -js

我正在研究基于 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'})

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

Token 的生成和解释:一个 JWT Token 由Header , Payload & Signature组成。

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

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

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

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

登录流程:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM