2010-04-23 43 views
28

WebSocket bağlantısı kullanıldığında kullanıcının kimliğini doğrulamak için olası yolları nelerdir?WebSockets kimlik doğrulama

Örnek senaryo: şifreli WebSocket bağlantısı üzerinden Web tabanlı çok kullanıcılı sohbet uygulaması. Bu uygulamadaki her bağlantının, belirli bir kimliği doğrulanmış kullanıcıya ait olduğunu ve bağlantı sırasında yanlış kullanıcı kimliğine bürünme yoluyla "kullanılamayacak" olduğunu nasıl garanti edebilirim (veya garanti ederim).

cevap

3

SSL/TLS X.509 sertifikalarını kullanarak istemci hem de sunucu kimlik doğrulaması için kullanılabilir. Kullandığınız web uygulama platformuna bağlı. Apache'de SSL_CLIENT_CERT environment variable geçerli olduğu bilinen bir sertifika listesine karşı geçerlilik için kontrol edilebilir. Bu, tam bir PKI kullanımını gerektirmez ve her bir müşteri için sertifika almanızı gerektirmez. Sunucunuzun ssl sertifikasını yedeklemek için bir CA kullanmanızı tavsiye etmeme rağmen.

+0

Sırasıyla HTTP ve WebSocket bağlantısı için SSL sertifikası kullanılacak demektir? – yojimbo87

+0

Rook'un söylediklerini kabul etmiyorum. SSL/TLS, aktarım katmanında verilerin değişmediğinden emin olabilir. Ama problem şu ki, web soket isteğinin kullanıcı A değil B kullanıcısı olduğunu nasıl bilebiliriz? Hem A hem de A kullanıcısı görüntü kaydedilir. Bağlantı kurulduğunda web soketi çerez göndermez. Dolayısıyla, bu web-sock, talebin kullanıcı B yerine gerçek kullanıcı A'dan nasıl oluştuğunu garanti eder? –

41

zaten uygulamalarınızda olmayan WebSocket bölümü için kimlik doğrulaması yapıyoruz, sadece bağladıktan sonra ilk mesaj olarak oturum tanımlama iletmektir, her zamanki gibi çerez kontrol edin.

UYARI:
Eğer socket.io kullanıyorsanız, daha da kolay-var çerezler bağlantıda otomatik geçirilir ve erişilebilir: Aşağıdaki flashsockets kullanıldığında çalışmıyor işaret oldu aşağıdaki gibi:

var io = require('socket.io'); 
var socket = io.listen(app); 
socket.on('connection', function(client){ 
    cookies = client.headers['cookie']; 
}); 
+4

Bunun her zaman çalıştığından emin misiniz? Socket.IO'nun Flash yuvalarına geri dönmesi durumunda, örneğin tarayıcı çerezleri (AFAIK) gönderilmez. haklısın – Thomas

+1

@Thomas, bunun yerine ilk mesaj yoluyla kimlik doğrulama yapması gerektiğini bahseder bir [dosyalanmış konu] (https://github.com/LearnBoost/socket.io/issues/101) var. –

+1

Bu pratik bir yöntem olmakla birlikte, başka türlü (giriş sayfasından ayarlanır) çerez gönderilen almazsınız çünkü, giriş (ve çerez ayarı) WebSocket'e aynı kökten gelmesi için yaptığı Web sayfasını gerektirir WebSocket bağlantısı. – oberstet