2016-03-31 16 views
5

Tôi đang cố gắng tìm ra cách tốt nhất là chuyển mã thông báo người gửi oauth đến điểm cuối websocket.Xác thực OAuth2 cho Websockets: Chuyển Mã thông báo của người gửi qua Subprotocols?

This SO answer suggests to send the token in the URL, tuy nhiên phương pháp này có tất cả những hạn chế của việc xác thực thông qua URL. Các tác động an ninh được thảo luận here

Vì vậy, tôi đã tự hỏi điều gì sẽ là nhược điểm khi sử dụng các giao thức con để chuyển mã thông báo tới máy chủ? tức là thay vì xử lý các giao thức con được yêu cầu dưới dạng danh sách các hằng số. Gửi ít nhất một subprotocol theo cú pháp như ví dụ: authorization-bearer-<token>

Mã thông báo sẽ kết thúc trong tiêu đề yêu cầu. Máy chủ trong khi xử lý các giao thức con sẽ có thể tìm và xử lý mã thông báo dễ dàng với một chút mã tùy chỉnh. Vì việc gửi các giao thức con nên được hỗ trợ bởi nhiều triển khai websocket, điều này sẽ làm việc cho nhiều khách hàng.

+0

Ý tưởng rất thú vị này. Bất cứ ai có thể bình luận đó là sâu hơn tham gia vào đó? – Javali

+0

Tôi tìm thấy một cách tiếp cận khác trong dự án này: https://github.com/tmc/grpc-websocket-proxy cú pháp hơi khác: 'Sec-Websocket-Protocol: Bearer, foobar' có nghĩa là' Authorization: Bearer foobar' – JE42

Trả lời

0

Điều này phù hợp với tôi, tôi đã sử dụng số WebSocket client library này.

Bạn cần gửi mã thông báo OAUTH qua tiêu đề Websocket, Bên dưới là mã, hy vọng điều này hữu ích.

ws = factory.createSocket("wss://yourcompleteendpointURL/"); 
ws.addHeader("Authorization", "Bearer <yourOAUTHtoken>"); 
ws.addHeader("Upgrade", "websocket"); 
ws.addHeader("Connection", "Upgrade"); 
ws.addHeader("Host", "<YourhostURLasabovegiveupto.com>"); 
ws.addHeader("Sec-WebSocket-Key", "<Somerandomkey>"); 
ws.addHeader("Sec-WebSocket-Version", "13"); 
ws.connect(); 
Các vấn đề liên quan