使用 jsonwebtoken 登录安全

Bra*_*arl 5 json express jwt reactjs redux

我目前正在使用 React 开发一个网站,我希望能够让用户登录。现在我的策略是在提交时将表单数据发送到服务器(快递),如果信息与我的数据库中的用户匹配,服务器会发回一个没有敏感信息(只有用户名)的签名 JWT。

客户端收到 JWT 后,我会将其添加到 localStorage 并将其解码后的数据添加到我的 redux 存储中。我计划让我的 redux 存储保存当前登录的用户。

我相信我的网站可能存在安全问题,因为目前我有它,所以当用户第一次到达网站时,如果有 JWT,它会被添加到我的 axios 标头中,并将解码后的 JWT 设置为当前用户. 代码如下所示:

if(localStorage.jwtToken) { // If token present, most likely a user is signed in

  setAuthorizationToken(localStorage.jwtToken) // Set that token to head all api calls

  store.dispatch(setCurrentUser(jwt.decode(localStorage.jwtToken))) // Set user in redux store
}
Run Code Online (Sandbox Code Playgroud)

目前我发现如果有人只是进入我的 localStorage,复制我的 JWT 并将其添加到他们的 localStorage 然后 bam,他们就是我。我不确定这是否真的是一个安全漏洞,因为我自己重新创建它的唯一方法是将令牌从一个浏览器物理复制到另一个浏览器。但总的来说,这似乎很不安全,因为只是拿走我的令牌就会窃取我的身份。

如果有人知道使这更安全的方法,或者是否有更好的策略,或者至少告诉我我做错了什么,那将不胜感激。

小智 1

别人如何才能得到你的代币?为所需的令牌指定过期时间。也许尝试不同的方式来保护令牌,特别是在 API 方面提供更多的安全性。登录时,将日志活动存储在数据库中并创建唯一字段来标识它,例如 IP 地址或用户代理,或者可能检测用户之前是否已点击登录端点。