2012-06-25 12 views
24

रिपोर्ट करने के लिए बुनियादी प्रमाणीकरण चुनौती को कैसे आगे बढ़ाएं * पर्यावरण के विवरण नीचे वर्णित हैं।मैनेजर यूआरएल

मैं रिपोर्टिंग सेवाओं के लिए प्रमाणीकरण समाधान बनाने की कोशिश कर रहा हूं।

ऑनलाइन लागतदारों को हमारे मौजूदा मूल्यवान डेटाबेस का उपयोग करके प्रमाणित किया जाना चाहिए, जबकि स्थानीय प्रशासनिक उपयोगकर्ता सरल, मूलभूत, प्रमाणीकरण का उपयोग कर सकते हैं।

मैं SSRS करने के लिए एक सुरक्षा विस्तार कर दिया है codeplex उदाहरण और जिस तरह मैं जारी करने के लिए बुनियादी चुनौती के रूप में इस तरह इस प्रकार

public void GetUserInfo(out IIdentity userIdentity, out IntPtr userId) 
{ 
    if (HttpContext.Current != null && HttpContext.Current.User != null) 
     userIdentity = HttpContext.Current.User.Identity; 
    else 
    { 
     HttpContext.Current.Response 
      .AddHeader("WWW-Authenticate", "Basic realm=\"ReportServer\""); 
     HttpContext.Current.Response.Status = "401 Unauthorized"; 
     HttpContext.Current.Response.Flush(); 
     HttpContext.Current.Response.Close(); 
     userIdentity = new GenericIdentity("not authorized"); 
    } 

    userId = IntPtr.Zero; 
} 

है का उपयोग का उपयोग कर जब कोई उपयोगकर्ता है कि LogonUser विधि के माध्यम से पारित नहीं किया है (यानी प्रत्यक्ष यूआरएल एक्सेस, बोली रिपोर्ट परिनियोजन, नियमित उपयोगकर्ता ऐप्स नहीं) मूल लॉगऑन/पासवर्ड पॉपअप के साथ चुनौती दी जाती है। इसके समर्थन के लिए मैं के रूप में

void IHttpModule.Init(HttpApplication context) 
{ 
    context.AuthenticateRequest += CustomAuthenticateRequest; 
} 

void CustomAuthenticateRequest(object sender, EventArgs e) 
{ 
    var app = sender as HttpApplication; 

    if (app == null) return; 

    var basicAuth = app.Context.Request.Headers["Authorization"]; 

    if (!string.IsNullOrEmpty(basicAuth)) 
    { 
     var loginpass = Encoding.Default.GetString(
      Convert.FromBase64String(basicAuth.Replace("Basic ", ""))).Split(':'); 
     if (loginpass.Length == 2 
      && loginpass[0] == adminUser 
      && loginpass[1] == adminPass) 
     { 
      app.Context.User = new GenericPrincipal(
       new GenericIdentity(adminUser), null); 
     } 
    } 
} 

यह ठीक काम करता है जब /ReportServer यूआरएल तक पहुँचने का पालन करने वाले HttpModule बनाया है, मैं चुनौती दी हो, हार्डकोडेड व्यवस्थापक लॉगिन दर्ज/गुजरती हैं और लॉग ऑन मिलता है।

समस्या है जब /Reports तक पहुँचने मैं

System.Net.WebException: अनधिकृत

मुझे पता है कि मैं कैसे पारित कर सकते हैं चाहते हैं: अनुरोध HTTP स्थिति 401 के साथ विफल लॉगिन/पास चुनौती /Reports

मैं रिपोर्टिंग सर्वो के साथ SQL Server 2012 चला रहा हूं सीईएस 2012, लेकिन अंदरूनी कामकाज मेरी web.config में SSRS 2008-R2

से नहीं बदली है मैं

<authentication mode="None" /> 
<identity impersonate="false" />, and the entry for the httpmodule 

है rssrvpolicy.config पर मेरी HttpModule के लिए codegroup FullTrust

rsreportserver.config पर साथ है मैं

है
<AuthenticationTypes> 
     <Custom/> 
    </AuthenticationTypes>, and the entry for the security extension 

मेरे पास SSL कॉन्फ़िगर नहीं है, फिर भी, और बाइंडिंग्स पर हैं आईआर डिफ़ॉल्ट

+0

मुझे अभी भी एक जवाब पसंद आएगा, लेकिन अभी के लिए मैंने एक कामकाज किया है। मेरे एचटीपी मॉड्यूल पर मैं केवल स्थानीय मशीन एक्सेस के माध्यम से रिपोर्ट मैनेजर तक पहुंच की इजाजत देता हूं। स्थानीय मशीन से एक्सेस करते समय मैंने संदर्भ उपयोगकर्ता को व्यवस्थापक के रूप में सेट किया। एक बहुत बदसूरत समाधान, लेकिन एक समाधान निरंतर। –

+0

ReportManager एक ही सार्वजनिक SOAP API का उपयोग करके ReportServer से बात करता है, इसलिए इसे किसी भी तरह प्रमाणित करना होगा। मुझे लगता है कि आपको ReportManager कॉन्फ़िगरेशन फ़ाइलों में एक ही मॉड्यूल जोड़ने की आवश्यकता है। मुझे आशा है कि ReportManager फिर ReportServer से बात करने के लिए एक ही ऑथ कुकी या क्रेडेंशियल्स का उपयोग करेगा। – user1578107

+0

कस्टम सुरक्षा संभव है। यदि आप एसएसआरएस सेवा स्तर पर प्रमाणीकरण और प्राधिकरण विधियों को ओवरराइड करते हैं तो यह एसएसआर प्रबंधक के साथ कार्यों को शामिल करने और एक डिफ़ॉल्ट लॉगिन पृष्ठ प्रदान करने का मामला है। –

उत्तर

4

त्रुटि संदेश से, ऐसा लगता है कि प्रमाणीकरण त्रुटि रिपोर्ट प्रबंधक के यूआई को प्रस्तुत करने पर होती है। कृपया फ़ोल्डर, सी: \ प्रोग्राम फ़ाइलें \ माइक्रोसॉफ्ट एसक्यूएल सर्वर \ MSRS11.MSSQLSERVER \ रिपोर्टिंग सेवाएं \ ReportManager \ पर जाएं, और web.config फ़ाइल को ढूंढें, और निम्न परिवर्तनों को लागू करें।

<authentication mode="None" /> 
<identity impersonate="false" />, and the entry for the httpmodule 
संबंधित मुद्दे