首页 > 解决方案 > 在不使用表单的情况下,从 javascript 应用程序从节点服务器获取 JWT 令牌的最佳安全方法是什么?

问题描述

在我的例子中,我有一个React应用程序(使用Next)需要使用一个// 应用程序提供node的API expressmysql

我的想法是有一个端点(/login)来提供基于user/的 JWT 令牌password(检查数据库中的用户并根据用户的 id 创建令牌),然后使用 JWT 令牌来使用 API 端点(那些令牌也存储在其中mysql)。但为了做到这一点,并且因为没有表单,我必须将凭据(userpassword)存储在客户端应用程序中,因此任何人都可以读取。我做对了吗?如果没有,还有哪些其他选项可以安全地使客户端 APP 使用 API 端点?

和/React位于同一个域中,默认情况下是根据我阅读的内容通过 express 设置的。此外,被激活。NodeExpressCORSHTTPS

标签: node.jsreactjsexpresssecurityjwt

解决方案


基本上,JWT 允许您完全避免使用会话并且不将它们存储在数据库中,JWT 就像您给用户的护照,它说明了他的(ID,例如用户名)、角色和任何其他数据(即如果有人看到是不敏感的),所以你不应该在 JWT 中存储密码

JWT 的安全性基本上在于没有其他实体可以模仿它(如果您使用强密钥进行签名)并且虽然可以加密您的 JWT,但只要您不加密它就不必加密将敏感数据放入其中。我认为您应该尝试在此网站上查看签名如何保护 JWT 的真实性

所以你应该创建/loginAPI,这将检查你的用户凭据然后给他JWT(说明他是用户'joe',例如角色'admin')然后你在过滤器中检查并验证这个JWT以进行身份​​验证& 授权用户在你的 webapp 中的操作

要获取 JWT,用户必须在 HTTPS 连接中向您提供他的凭据,这将使连接本身加密,从而保护他的凭据免受窃听或中间人攻击


推荐阅读