2015-07-28 15 views
9

Tôi đang thiết lập máy chủ Node.js để liên lạc với WebSockets với ứng dụng web của tôi. Tôi đã lên kế hoạch sử dụng JSON Web Tokens để giới hạn quyền truy cập chỉ cho những người dùng đã được xác thực với ứng dụng web của chúng tôi. Trong khi nghiên cứu, tôi gặp khó khăn khi tìm gói WebSocket cho Node.js hỗ trợ cài đặt phía máy khách của tiêu đề Authorization và sử dụng nó trên cuộc gọi kết nối ban đầu?Chuyển JWT tới WebSocket của Node.js trong tiêu đề Cấp quyền trên kết nối ban đầu

Tôi thường xuyên xem các đề xuất để chuyển mã thông báo thông qua tham số truy vấn, điều này có thể kém an toàn hơn khi chuyển mã thông báo qua tiêu đề Authorization. Tui bỏ lỡ điều gì vậy? Có bất kỳ thư viện WebSocket tốt, được duy trì tốt nào cho phép đặt phía máy khách tiêu đề Authorization để tôi có thể ngăn chặn các kết nối không mong muốn đến máy chủ không?

+1

Tôi đang cố gắng tìm ra điều tương tự. Theo tôi có thể nói trình duyệt sẽ xử lý tất cả các tiêu đề và không cung cấp cách thay đổi chúng. Tôi đang cố thêm một mã thông báo vào chuỗi truy vấn trên URL kết nối, nhưng tôi đang cố gắng lấy thông tin đó ở cuối máy chủ (node.js với thư viện ws). Tôi không nghĩ rằng một param truy vấn là bất kỳ kém an toàn. Làm thế nào bạn làm điều đó? – Rog

+0

Tôi đã làm việc đó một chút. Với chuỗi truy vấn? Jwt = blah ... var token = url.parse (ws.upgradeReq.url, true) .query.jwt; – Rog

+0

nhưng điều đó sẽ phơi bày quyền jwt? –

Trả lời

8

API WebSocket dựa trên trình duyệt does not make it possible to specify HTTP headers. Mặt khác, phương pháp truy vấn param hoạt động và không phải là xấu (khi được sử dụng qua HTTPS), do đó, nó thường được sử dụng để thay thế.

Mặc dù có các triển khai WebSocket cho Node.js để có thể chỉ định tiêu đề HTTP, nhưng điều này chỉ hoạt động khi chạy ứng dụng khách trong Node.js. Nó không hoạt động khi chạy trong trình duyệt.

Einaros 'ws là một ví dụ như vậy. Đi qua một mã thông báo JWT qua Authorization tiêu đề là đơn giản khi chạy trong Node.js:

var WebSocket = require("ws"); 

' does not work in browsers 
var token = "Replace_this_with_your_JWT_token"; 
var options = { 
    headers: { 
     "Authorization" : "JWT " + token 
    } 
}; 

var ws = new WebSocket("wss://example.com/path", options); 
... 

Nhưng khi sử dụng từ Browserify, đòi hỏi ws chỉ đơn giản trả về trình duyệt dựa trên API WebSocket bình thường mà mất khả năng đi qua tiêu đề tùy chỉnh. Và trừ khi trình duyệt web thêm hỗ trợ cho các tiêu đề đi qua, đi qua param truy vấn là cách để đi.

Các vấn đề liên quan