node.js - 在不使用表单的情况下,从 javascript 应用程序从节点服务器获取 JWT 令牌的最佳安全方法是什么?
问题描述
在我的例子中,我有一个React
应用程序(使用Next
)需要使用一个// 应用程序提供node
的API express
。mysql
我的想法是有一个端点(/login
)来提供基于user
/的 JWT 令牌password
(检查数据库中的用户并根据用户的 id 创建令牌),然后使用 JWT 令牌来使用 API 端点(那些令牌也存储在其中mysql
)。但为了做到这一点,并且因为没有表单,我必须将凭据(user
和password
)存储在客户端应用程序中,因此任何人都可以读取。我做对了吗?如果没有,还有哪些其他选项可以安全地使客户端 APP 使用 API 端点?
和/React
位于同一个域中,默认情况下是根据我阅读的内容通过 express 设置的。此外,被激活。Node
Express
CORS
HTTPS
解决方案
基本上,JWT 允许您完全避免使用会话并且不将它们存储在数据库中,JWT 就像您给用户的护照,它说明了他的(ID,例如用户名)、角色和任何其他数据(即如果有人看到是不敏感的),所以你不应该在 JWT 中存储密码
JWT 的安全性基本上在于没有其他实体可以模仿它(如果您使用强密钥进行签名)并且虽然可以加密您的 JWT,但只要您不加密它就不必加密将敏感数据放入其中。我认为您应该尝试在此网站上查看签名如何保护 JWT 的真实性
所以你应该创建/login
API,这将检查你的用户凭据然后给他JWT(说明他是用户'joe',例如角色'admin')然后你在过滤器中检查并验证这个JWT以进行身份验证& 授权用户在你的 webapp 中的操作
要获取 JWT,用户必须在 HTTPS 连接中向您提供他的凭据,这将使连接本身加密,从而保护他的凭据免受窃听或中间人攻击
推荐阅读
- spring-boot - 使用 Spring Boot 构建多租户应用程序
- asp.net - HTTP 重定向 - Google 负载均衡器和 Windows Server 上的无限循环
- android - Android ListView 在向下滚动时显示不正确的内容,然后在向上滚动时显示正确的内容
- vue.js - 如何使用路径携带多参数?
- c# - TempData 目前无法处理此请求
- c# - 存储对象时属性如何工作?
- javascript - 按浏览器后退按钮后,带有 ajax 更新的页面不记得状态
- json - 为什么 IBM Watson Assistant Complex 对象属性不更新?
- android - Android - RecyclerView:没有附加适配器;跳过布局错误
- java - Scala 在线程中的“共享”局部变量与 Java 不同吗?它是如何工作的?