使用 JWT 和 Loopback 4 验证 Socket 连接

Posted

技术标签:

【中文标题】使用 JWT 和 Loopback 4 验证 Socket 连接【英文标题】:Authenticating Socket connection using JWT & Loopback 4 【发布时间】:2020-05-03 08:20:45 【问题描述】:

我按照以下example 使用 LB4 和 Socket.io 构建了一个聊天应用程序,现在我需要使用 JWT 保护该应用程序。如何将以下reference 中提到的 JWT 策略集成为我的应用程序架构的一部分。有可能做这样的事情吗?

@ws.connect()
@authenticate('jwt')
  connect(socket: Socket) 
    console.log('Client connected: %s', this.socket.id);
    socket.join('room 1');
  

【问题讨论】:

【参考方案1】:

对我来说,我使用Interceptors。

创建拦截器 获取Handeshake 对象 验证它

类似这样的:

1.在客户端,通过Socket.io创建socket对象

const socket = io(
    `YOUR_URL`,
    
        "transports": ["websocket", "polling", "flashsocket"],
        "query":  "authorization": `Bearer $token`  // <= token in here
    
);
    创建拦截器,然后在套接字控制器中使用它
export const SocketAuth = (): Interceptor => 
    return async (invocationCtx, next) => 
        const handshake: Handeshake = (invocationCtx.target as any).socket.handshake;
        // ...
    

@ws('/chat')
export class ChatController 

    @intercept(SocketAuth) // <= !!!!
    @ws.connect()
    async connect(socket: Socket) 
        // ...
    


【讨论】:

以上是关于使用 JWT 和 Loopback 4 验证 Socket 连接的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 keycloak 对 loopback 4 应用程序进行身份验证

loopback4-openapi规范中的错误映射

如何使用 python_jwt 验证 firebase 令牌

如何使用 Swift 泛型处理成功和错误 API 响应?

整合JWT

前端(Node.js)-- 使用loopback快速搭建用户系统