2014-04-29 5 views
5

मेरे पास एक सिग्नलर ऐप है। एक विंडोज सेवा में होस्ट किया गया (ओडिन & कटाना को स्वयं होस्टिंग के रूप में इस्तेमाल किया गया) और यह mydomain.com :8080सिग्नल सर्वर कनेक्शन कैसे प्रतिबंधित करें?

उसी सर्वर पर, मेरे पास एक एमवीसी एप्लीकेशन भी है जो मूल रूप से एक वेबसाइट है जो मेरे सिग्नलआर हब से जुड़ती है मैंने ऊपर उल्लेख किया है।

मैं केवल अपने एमवीसी अनुप्रयोग में अपने सिग्नलर ऐप तक पहुंच प्रतिबंधित करना चाहता हूं। मैंने इंटरनेट की खोज की है लेकिन इसके उदाहरण के साथ नहीं आया है।

क्या यह हासिल करना संभव है? अगर मैं अपने एमवीसी ऐप से या किसी अन्य ऐप से कनेक्शन आ रहा हूं, तो मुझे जानकारी कैसे मिल सकती है? क्या मुझे अपने सिग्नलआर एप्लिकेशन से कनेक्ट करने में सक्षम होने के लिए अपने स्वयं के एमवीसी एप्लिकेशन के लिए प्राधिकरण को लागू करने की आवश्यकता है?

अभी इंटरनेट पर हर कोई mydomain.com:8080/signalr एंडपॉइंट तक पहुंच सकता है जिसका मूल रूप से एक प्रतियोगी क्लाइंट को कोड कर सकता है जो मेरे सिग्नलआर हब से जुड़ता है और इसका उपयोग करता है। इस परिदृश्य को रोकने के विकल्प क्या हैं?

पुनश्च: अधिक जानकारी के लिए पूछना -यदि आपकी बजाय बस के रूप में "गैर रचनात्मक" चौकी चिह्नित की need- क्योंकि मैं नहीं जानता कि कैसे इस प्रश्न पूछा जा सकता है और अधिक "रचनात्मक"

उत्तर

8

मैं मेरा मानना ​​है कि एक काम उदाहरण है, यह त्वरित और गंदा है, लेकिन यह काम करना चाहिए, और आप तो यह आपकी आवश्यकताओं के लिए बेहतर हैं जाएगा कि यह विस्तार करने के लिए सक्षम होना चाहिए:

मैं एक वर्ग कि Microsoft.AspNet.SignalR.AuthorizeAttribute से विरासत बनाया है और AuthorizeHubConnection overrode विधि:

[AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)] 
public class CustomAuthorize : AuthorizeAttribute 
{ 

    public override bool AuthorizeHubConnection(Microsoft.AspNet.SignalR.Hubs.HubDescriptor hubDescriptor, IRequest request) 
    { 
     string referer = request.Headers["Referer"]; 
     string authority = new Uri(referer).Authority; 
     if (authority == "mydomain.com:8080") 
     { 
      return true; 
     } 
     return false; 
    } 
} 

यह सब एक हार्ड कोड वाले एक के खिलाफ रेफरर हेडर के मेजबान/प्राधिकारी की जांच करता है, और यदि वे मेल खाते हैं तो सत्य लौटाता है।

फिर आप इसे इस तरह उपयोग कर सकते हैं:

[CustomAuthorize] 
public class ChatHub : Hub 
{ 
    //Hub code here... 
} 

CustomAuthorize तो रिटर्न झूठी, अनुरोध वहाँ बंद हो जाएगा। हब का OnConnected() ट्रिगर नहीं किया जाएगा।

+0

बहुत बढ़िया अनुमति देते हैं, मैं इसे जैसे ही मैं वापस घर के लिए मिलता है की कोशिश करेंगे। एक त्वरित सवाल हालांकि: वेबसाइट पर आने वाले प्रत्येक ग्राहक के लिए होस्ट हमेशा mydomain.com:8080 होगा? मुझे लगता है कि एमवीसी एप्लिकेशन सिग्नलआर से कनेक्ट करते समय क्लाइंट के होस्ट पते को पास करता है, क्या मैं सही हूं? – Alaminut

0

बस उपयोग CORS बजाय CORS code.in लेखन का विकल्प केवल अपने डोमेन

संबंधित मुद्दे