如何解决使用Node / React验证socket.io连接时,在何处以及如何生成JWT令牌?
据我对Socket.io的了解,存在多个安全问题,例如this stack exchange post.
对于我来说,我在Node中使用socket.io,在React中使用socket.io-client,并建立了一条很好的通信线路,但是我不需要从客户端进行任何登录,因为我m只需从后端查询外部API并将结果发布到前端即可。因此,我决定使用软件包socketio-jwt
使用jwt令牌来保护连接。
要实现,documentation包含以下示例以使用jwt身份验证:
服务器端
io.use(socketioJwt.authorize({
secret: 'your secret or public key',handshake: true
}));
io.on('connection',(socket) => {
console.log('hello!',socket.decoded_token.name);
});
客户端
const socket = io.connect('http://localhost:9000',{
extraHeaders: { Authorization: `Bearer ${your_jwt}` }
});
我的问题是这样的:在客户端端变量 your_jwt
来自何处,如何生成它?
解决方法
您应该在Node应用程序中具有一个生成JWT的终结点,客户端将从该终结点获取它,将其保存在持久存储中并重新使用。
,令牌需要由login
API生成。用户将username
和password
发送到login
端点,然后您的服务器返回JWT。
现在,这个login
API是什么?
大多数API服务器都实现HTTP端点(POST /login
)。然后客户端可以将其保存在local storage
中。
如果您的应用没有HTTP服务器来支持,则可以通过WebSocket来实现。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。