2011-05-29 5 views
12

o rendelenmiş mı onu da müşteri kimlik doğrulama gelecekte el sıkışma ile yapılacağını, kendim WebSocket sunucusunu çalıştıran ve soruyorum ... taslak belki xxxx? Bir oturum kimliği sunucuya gönderilebileceğini duymuştum, bu yüzden belki de bu durum müşteriye yardımcı olabilir ...WebSocket'e kimlik

Ne yapacağım atm, istemciler gönderene kadar en fazla 10 saniye beklemek bana giriş başlığı, kullanıcı adı ve şifre ile bir mesaj. Ama bence bu "çözüm" değil. Orada nasıl yapıyorsunuz?

cevap

9

WebSockets protokolü, el sıkışması sırasında standart HTTP kimlik doğrulama başlıklarının değiştirilmesine izin verir. Varolan bir web sunucusuna modül olarak bağlanan bir WebSockets sunucunuz varsa, web sunucusunda varolan kimlik doğrulaması zaten çalışmalıdır. Aksi takdirde, bağımsız bir WebSockets sunucunuz varsa, kimlik doğrulama desteğini eklemeniz gerekebilir.

Güncelleme

@Jon işaret ettiği gibi, normal HTTP/XHR istekleri farklı olarak, tarayıcı API WebSocket bağlantıları için "X *" başlıklarını keyfi ayarlamak için izin vermez. Ayarlayabileceğiniz tek üstbilgi değeri protokoldür. Bu talihsiz bir şey. Yaygın bir çözüm, yetkilendirme/kimlik doğrulama için mevcut HTTP mekanizmasına dayanan bir bilet tabanlı sistem kullanmaktır ve bu bilet websocket bağlantısıyla birlikte geçirilir ve şu şekilde doğrulanır: https://devcenter.heroku.com/articles/websocket-security

+0

WebSocket özelliklerinin bir parçası olabilir, ancak Çoğu tarayıcıda WebSocket API'sinin bir parçası değildir. WebSocket el sıkışmasıyla birlikte özel üstbilgileri tarayıcılarda gönderemezsiniz. Bkz. Https://github.com/SocketCluster/socketcluster-client/issues/9 – Jon

+0

_ "normal HTTP/XHR isteklerinden farklı olarak, WebSocket bağlantıları için rasgele" X- * "başlıklarını ayarlayamazsınız." _ - aslında @Jon işaret etti ** WebSocket JS API ** aracılığıyla bunu yapamazsınız. Bu, WebSocket bağlantıları için * yapılamayacağını söylemekle aynı şey değildir. – Madbreaks

+1

@Madbreaks iyi bir nokta. Bunun bir WebSocket protokol sınırlaması yerine özellikle bir WebSocket tarayıcı API'si olduğunu açıklığa kavuşturdum. Ayrıca, üstbilgileri ayarlamanıza izin veren bazı Node.js/JS WebSocket uygulamaları vardır. Yani gerçekten sadece bir mekanizma sağlamayan W3C tarayıcı API'sı. – kanaka