Rust WebRTC P2P #14 - Auth Middleware HTTP + WebSocket Auth Flow
Bài 1450:35

Rust WebRTC P2P #14 - Auth Middleware HTTP + WebSocket Auth Flow

Trong phần 14 này, chúng ta thực hiện một bước rất quan trọng để bảo vệ hệ thống: xây dựng Middleware cho HTTP Server và thiết lập luồng xác thực cho WebSocket. Đây là lớp bảo vệ giúp đảm bảo chỉ những người dùng hợp lệ mới có thể truy cập API và thiết lập kết nối signaling.

1. Xây dựng HTTP Middleware

Tìm hiểu cách Middleware hoạt động như một lớp gatekeeper cho các route cần xác thực. Triển khai việc đọc JWT từ cookie header, verify thông tin người dùng và inject dữ liệu user vào controller thông qua Extension của Axum. Đồng thời xử lý các trường hợp lỗi với mã 401 Unauthorized một cách rõ ràng.

2. Xác thực WebSocket

Thực hiện auth ngay từ bước handshake bằng cách lấy token từ header. Thiết lập cơ chế timeout bằng tokio::spawn, nếu client không xác thực trong vòng 30 giây thì tự động đóng kết nối để tránh lãng phí tài nguyên. Duy trì kết nối bằng cách gửi ping định kỳ mỗi 10 giây.

3. Xử lý bất đồng bộ

Sử dụng MPSC Channel và One-shot Channel để truyền dữ liệu xác thực giữa các task khác nhau, đảm bảo luồng xử lý rõ ràng và không block.

4. Testing thực tế

Sử dụng Postman để test API get_me, kiểm tra luồng xác thực HTTP. Demo quá trình kết nối WebSocket từ trạng thái bị từ chối khi thiếu token đến khi xác thực thành công và có thể trao đổi dữ liệu WebRTC.

5. Kết quả đạt được

Sau bài học này, bạn sẽ nắm được cách xây dựng Middleware trong Axum, hiểu cách tổ chức luồng xác thực cho cả HTTP và WebSocket, cũng như cách quản lý kết nối trong hệ thống realtime.

Khóa học thực chiến giúp bạn xây dựng từ đầu một Signaling Server bằng Rust, xử lý các cuộc gọi audio/video trực tiếp giữa hai trình duyệt thông qua WebRTC Peer-to-Peer mà không cần Media Server. Bạn sẽ nắm vững kiến trúc WebRTC signaling, cách trao đổi SDP Offer/Answer và ICE Candidates giữa các peer thông qua WebSocket. Khóa học sử dụng Axum + Tokio cho backend, MongoDB để lưu trữ dữ liệu, và JWT để xác thực người dùng. Đây là Phần 1 trong series 7 phần về Lập trình Rust với VoIP, bao gồm: WebRTC P2P, Media Server (Janus, LiveKit, Kurento, Asterisk, FreePBX), và hệ thống CRM/Queue/nhạc chờ/chuyển tiếp cuộc gọi. Yêu cầu tiên quyết: Kiến thức cơ bản về Rust (Ownership, Lifetimes, Traits, Async/Await).

Công nghệ sử dụng

RustWebRTCVoIPP2PAxumTokioWebSocketMongoDBJWT

Tác giả

ByteBuffer

ByteBuffer

Coder cỏ tại DTS Group và IPA Solutions

Chuyên gia về Rust và hệ thống VoIP/WebRTC. Nhiều năm kinh nghiệm xây dựng các hệ thống real-time communication với hiệu năng cao và độ trễ thấp.