यह सवाल एक और धागा से संबंधित है, आप here: Forms authentication with SignalR पढ़ सकते हैं जहाँ मैं समझने के लिए रूपों को लागू एएसपी नेट पर फॉर्म्स प्रमाणीकरण और उपयोगकर्ता dfowler का धैर्य के साथ करने की कोशिश की करने के लिए एक सिग्नलआर हबSignalR: कैसे प्रमाणीकरण लागू/समाप्त हब कनेक्शन सर्वर साइड
समस्या का विवरण: मैं चाहता हूं कि केवल प्रमाणित उपयोगकर्ता सिग्नलआर हब को कनेक्ट कर सकें और संदेश प्राप्त/भेज सकें।
घुसपैठ परिदृश्य: घुसपैठिया क्लाइंट कंप्यूटर पर अस्थायी फ़ाइलों तक पहुंचने वाले वेब पेज के HTML और जावास्क्रिप्ट को संभावित रूप से कैप्चर/एक्सेस कर सकता है। इस घुसपैठिए को हब के कनेक्शन को स्थापित/उपयोग करने के लिए आवश्यक सभी विवरण (विधियों, केंद्र नाम आदि) को जान सकते हैं। dfowler से एक प्रस्तावित समाधान implementing IConnect है:
आप IConnected को लागू करने और कनेक्ट में निम्नलिखित कोड लिखने होता अगर (Context.User.Identity.IsAuthenticated!) नया अपवाद ("GTFO") फेंक;
इसलिए मैं इस
public System.Threading.Tasks.Task Connect()
{
if (!Context.User.Identity.IsAuthenticated
|| !(Context.User.IsInRole("role1") || Context.User.IsInRole("role2")
))
throw new Exception("User not authorized");
return null;
}
की तरह कुछ समस्या है, एक बार परीक्षण किया साथ की कोशिश की, कि जब कनेक्ट विधि बुलाया जा रहा है, कनेक्शन पहले स्थापित किया गया है और सादे अपवाद फेंकने में मदद नहीं करेगा (यदि मुझे सही तरीके से पता चलता है तो कनेक्शन को क्लाइंट को कनेक्शन भेजने के लिए कनेक्ट किया जाना चाहिए, अपवाद फेंकने से केवल स्वागत संदेश भेजा नहीं गया है)।
तथ्यों में, मेरे परीक्षणों से, ग्राहक अभी भी सभी संदेशों को पढ़ सकते हैं (और उन्हें भी भेज सकते हैं)।
अब, जो मेरे मन के लिए आते हैं दृष्टिकोण:
- बिल्कुल सही समाधान: अस्वीकार या सर्वर साइड पर कनेक्शन समाप्त: कोई सुराग नहीं कैसे SignalR में यह करने के लिए (मैं में एक विधि को खोजने के लिए करने की कोशिश की API लेकिन कोई किस्मत)
- जांच करता है, तो उपयोगकर्ता एक समूह प्राप्त/(उसे संदेश भेजने से बचने के लिए का हिस्सा है लेकिन यह अभी भी बाढ़/डॉस हमलों)
- डिस्कनेक्ट करने के लिए ग्राहक के लिए एक संदेश भेजा जा रहा है की संभावना है: स्पष्ट रूप से अगर मैं घुसपैठियों से लड़ रहा हूं तो इससे मदद नहीं मिलती है।
कोई अन्य दृष्टिकोण? सर्वर पक्ष पर कनेक्शन को समाप्त करने का कोई भी तरीका या स्वीकार किया जाना चाहिए कि एकमात्र असली प्रमाणीकरण मेजबान वेबपृष्ठ में से एक है (सभी सिग्नलआर क्लाइंट हमलों के लिए दरवाजा खोलना?
यह foreverFrame की तरह दिखता है: सर्वर संचार जब मैं IConnect.Connect
विधि बिना शर्त एक अपवाद फेंक (ब्राउज़र IE9) का उपयोग करें -)
संपादित
यहाँ ग्राहक के अनुक्रम है विफल रहता है लेकिन लंबे समय तक चलने वाली फॉलबैक स्थापित की जा रही है और वैसे भी काम करती है - यह ब्लॉक
द्वारा जावास्क्रिप्ट में कैप्चर की गई त्रुटि को फेंकने के बादif (connection.state === signalR.connectionState.connecting) {
// Connection hasn't been started yet
throw "SignalR: Connection has not been fully initialized.
Use .start().done() or .start().fail() to run logic after
the connection has started.";
}
[फीचर अनुरोध] (https://github.com/SignalR/SignalR/issues/635) सिग्नलर गिटहब प्रोजेक्ट साइट – eddo