.net WCF WebHttp मिश्रित प्रमाणीकरण(बेसिक और बेनामी)




authentication http-authentication (4)

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

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

यह सब WebHttp बाध्यकारी से संबंधित है, जो कस्टम सेवा होस्ट (IIS इस समय एक विकल्प नहीं है) में होस्ट किया गया है।

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

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

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

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


सबसे पहले, यह सेवा विशिष्टता के अनुसार गुमनाम कॉल में सही ढंग से प्रतिक्रिया करती है।

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

तो आप निम्न विकल्पों के साथ छोड़े गए हैं:

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

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

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


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





http-authentication