2008-10-16 12 views
8

यह सब कस्टम सेवा होस्ट (आईआईएस इस समय एक विकल्प नहीं है) में होस्ट किए गए वेबहट्प बाध्यकारी से संबंधित है।डब्ल्यूसीएफ वेबएचटीपी मिश्रित प्रमाणीकरण (बेसिक और बेनामी)

मैंने एक कस्टम UserNamePasswordValidator, और एक कस्टम IAuthorizationPolicy लागू किया है। जब मैं मूल प्रमाणीकरण का उपयोग करने के लिए एंडपॉइंट के बाध्यकारी को कॉन्फ़िगर करता हूं, तो सब कुछ ठीक वैसे ही काम करता है जैसा कि मैं चाहूंगा (कस्टम प्रिंसिपल, कस्टम भूमिकाएं, आदि ..)।

मैं अज्ञात HTTP पहुंच के लिए भी क्षमता जोड़ना चाहता हूं, और मेरे कस्टम कार्यान्वयन ने बेनामी उपयोगकर्ता को कुछ डिफ़ॉल्ट भूमिकाओं में रखा है .. (यदि कोई प्रमाणीकृत हेडर भेजा नहीं गया है)।

अब क्या होता है कि मेरे किसी भी कस्टम कोड को हिट करने से पहले अज्ञात उपयोगकर्ताओं को 401 दिया जाता है। अगर मैं HTTP मूल प्रमाणीकरण आवश्यकता को बंद करता हूं, तो प्रमाणीकरण शीर्षलेख पूरी तरह अनदेखा कर दिया जाता है।

मैं कैसे कॉन्फ़िगर, या एक प्रमाणित हैडर, (2 अलग अंतिमबिंदुओं बनाने के बिना) इस दोनों तरीकों से ऐसा करने के लिए इंजेक्षन करते हैं?

+1

मुझे जवाब नहीं पता ...मैंने आपको +1 दिया है ताकि आप 1000 तक पहुंच सकें;) – sebagomez

+0

आओ, इस सवाल के बेहतर जवाब हैं, सही चिह्नित चिह्नित एक मुश्किल से –

+0

@ सैम प्रतिक्रिया के लिए धन्यवाद है। मैंने उस उत्तर को सौंपा जहां यह सबसे अच्छा फिट है। यह एक कठिन कॉल है। सेबेस्टियन ने पहले सही जवाब दिया। निश्चित रूप से, दूसरों को अधिक सुसंगत हैं। री-रीडिंग में (क्यू पोस्ट होने के बाद पिछले 9 मस्जिद में चीजें बदली गईं), मैंने जो कुछ भी सोचा है वह मुझे सौंपा गया है। धन्यवाद – TheSoftwareJedi

उत्तर

1

सबसे पहले, सेवा अज्ञात कॉल के लिए सही ढंग से प्रतिक्रिया देती है, specification के अनुसार।

दूसरा, यह असंभव है। जब आप अपनी सेवा को स्वयं-होस्ट कर रहे होते हैं और आपके पास कुछ http बाध्यकारी होते हैं, तो डब्ल्यूसीएफ System.Net.HttpListener उदाहरण का उपयोग http अनुरोधों (System.ServiceModel.Channels.SharedHttpTransportManager.OnOpen में निर्मित) का जवाब देने में सक्षम होने के लिए करेगा। इस श्रोता में HandleAuthentication नामक एक विधि है जिसे आपके किसी भी कस्टम कोड के नाम से पहले कहा जाता है। चुनौती (डब्ल्यूडब्ल्यूडब्ल्यू-प्रमाणीकरण) के साथ 401 प्रतिक्रिया वापस भेजने के लिए यह ज़िम्मेदार है। इसके बारे में आप कुछ भी नहीं कर सकते हैं। अगर ऐसा है, तो मैं जानना चाहता हूं।

तो आप निम्नलिखित विकल्पों के साथ छोड़ दिया जाता है:

  • दो समाप्ति बिंदुओं
  • अपने ग्राहकों को कॉन्फ़िगर अपने ग्राहकों को पता करने के लिए डिफ़ॉल्ट क्रेडेंशियल्स
  • परिवर्तन तो वे चुनौती
का जवाब कर सकते हैं
+0

वास्तव में HttpListener कई प्रमाणीकरण योजनाओं का समर्थन करने में काफी सक्षम है। आपको केवल HttpListener की प्रमाणीकरणSchemeSelectorDelegate संपत्ति के लिए एक हैंडलर लागू करने की आवश्यकता है। यह डब्ल्यूसीएफ है जो आपको खत्म कर रहा है। एक बार फिर। –

+0

हां, डब्ल्यूसीएफ इस घटना में हैंडलर संलग्न करने का कोई तरीका नहीं प्रदान करता है, अन्यथा यह संभव होगा ... –

-2

मुझे ऐसा नहीं लगता ... मैं सिर्फ लिख रहा था कि आपको अंतराल को अलग करने की आवश्यकता है जब मैंने आपको फिर से प्रश्न पढ़ने का फैसला किया और आपके प्रश्न का अंतिम विवरण देखा। तो जवाब नहीं होगा (मुझे पता है)

+0

वेबहट्प बाइंडिंग पर अनुरोध करने से पहले http शीर्षलेख इंजेक्ट करने का तरीका जानें? एक कस्टम बाध्यकारी तत्व शायद? एक कस्टम बाध्यकारी में HTTP शीर्षलेख में हेरफेर करने के किसी भी उदाहरण महान होगा। – TheSoftwareJedi

+0

क्षमा करें दोस्त मैं नहीं ... -1 !, डब्ल्यूटीएफ? – sebagomez

0

मैंने अतीत में इस पर शोध किया है और पाया है कि यह कॉन्फ़िगरेशन के माध्यम से संभव नहीं है जब तक कि आप 2 अलग-अलग अंतराल (जो आप चाहते हैं) नहीं बनाते। यह बस डब्ल्यूसीएफ द्वारा बॉक्स से बाहर समर्थित नहीं है।

हालांकि, डब्ल्यूसीएफ बेहद अनुकूलन योग्य है और आप इसे एक कस्टम चैनल/बाइंडिंग लिखकर ऐसा कर सकते हैं जो आप चाहते हैं जो करेंगे। मेरा सुझाव है कि आप REST Chess स्रोत कोड पर एक नज़र डालें। यह आपको शुरू करना चाहिए।

0

आपकी सर्वश्रेष्ठ शर्त भूमिका प्रदाता के माध्यम से डिफ़ॉल्ट भूमिकाओं को लागू करना है और अज्ञात उपयोगकर्ता स्वचालित रूप से उस भूमिका में शामिल होने देते हैं। फिर या तो प्रोग्रामेटिक रूप से, या पॉलिसी इंजेक्शन (पहलू उन्मुख) नीति के माध्यम से सेट करें ताकि विशिष्ट भूमिका के माध्यम से कुछ अज्ञात पहुंच की अनुमति हो।

कॉन्फ़िगरेशन के माध्यम से इसे स्थापित करने के लिए, यदि यह संभव है, तो यह "हैकी" की तरह कठिन और प्रकार होगा।

+0

हां - लेकिन यह किसी भी भूमिका प्रदाता को भी हिट नहीं करता है अगर उसे प्रमाणीकृत हेडर नहीं मिलता है। यह बस बाध्यकारी कोड से 401 जल्दी देता है। – TheSoftwareJedi

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