2017-08-09 6 views
6

मेरे वेब कोर एपीआई में यह कोड पुष्टि करता है कि मैं एक प्रमाणित उपयोगकर्ता हूं, लेकिन मुझे अपना उपयोगकर्ता नाम नहीं मिल रहा है, इसके बजाय मुझे एप्लिकेशन पूल का नाम मिल रहा है। मैं इसे कैसे ठीक करूं?मुझे विंडोज प्रमाणीकृत वेब कोर एपीआई में अपना उपयोगकर्ता नाम क्यों नहीं मिल रहा है?

var testa = User.Identity.GetType(); 
NLogger.Info($"testa = {testa}"); 
var testd = User.Identity.IsAuthenticated; 
NLogger.Info($"testd = {testd}"); 
var loggedInUser = User.Identity.Name; 
NLogger.Info($"loggedInUser = {loggedInUser}"); 

मेरे लॉगफाइल में मुझे मिलता है;

testa = System.Security.Principal.WindowsIdentity 
testd = True 
loggedInUser = IIS APPPOOL\SIR.WEBUI 

मैं नियंत्रक के लिए [अधिकृत] टैग का उपयोग करता हूं और अनाम प्रमाणीकरण अक्षम है।

ठीक है मैं पोस्टमैन से विधि को कॉल करता हूं, यह ठीक काम करता है, LoggedInUser सही है। लेकिन जब मैं अपने कोड से कॉल करता हूं तो मुझे ऊपर दिखाया गया गलत लॉग इन यूज़र मिलता है। मेरे क्लाइंट ऐप से वेब एपीआई कॉल करने के लिए मैं जिस कोड का उपयोग करता हूं वह है;

public static async Task<IEnumerable<ContractDto>> GetAllForUser() 
{ 
    using (var client = new HttpClient(new HttpClientHandler { UseDefaultCredentials = true })) 
    { 
     client.BaseAddress = new Uri(AppSettings.ServerPathApi); 
     var path = GetPath("getallforuser"); 
     var response = await client.GetAsync(path); 
     response.EnsureSuccessStatusCode(); 
     var stringResult = await response.Content.ReadAsStringAsync(); 
     return JsonConvert.DeserializeObject<IEnumerable<ContractDto>>(stringResult); 
    } 
} 

आईआईएस में मैंने विभिन्न पूल विकल्पों में एप्लिकेशन पूल प्रकार सेट किया है; एप्लिकेशनपूलिडेंसी, नेटवर्क सेवा, लोकलसोर्स, लोकलसिस्टम और प्रत्येक बार एप्लिकेशन का परीक्षण किया। मुझे पृथ्वी पर क्या याद आ रही है?

+0

एक ने वही समस्या का जवाब स्वीकार यहाँ https://stackoverflow.com/a/12675503/5233410 – Nkosi

+0

मुझे यकीन है कि नहीं कर रहा हूँ कोशिश कर सकते हैं यदि यह समस्या है, लेकिन मेरा सुझाव है कि आप "उपयोगकर्ता प्रोफ़ाइल लोड करें" को सही पर सेट करने का प्रयास करें, यदि पहले से नहीं है, IIS – Shahbaz

+0

@Nkosi में, कोशिश की लेकिन यह काम नहीं करता है। मैं वेब कोर एपीआई का उपयोग कर रहा हूं और मुझे लगता है कि प्रतिरूपण अलग-अलग काम करता है। शायद मुझे प्रतिरूपण का उपयोग करना चाहिए? लेकिन फिर मुझे AJAX का उपयोग करते समय ऐसा करने की आवश्यकता नहीं है, तो सी # को अलग क्यों होना चाहिए? – arame3333

उत्तर

0

प्रयास करें इस

if (System.Web.HttpContext.Current.User.Identity.IsAuthenticated) 
{ 
    string username = System.Web.HttpContext.Current.User.Identity.Name; 
} 

या आप

var user = (System.Security.Principal.WindowsIdentity)HttpContext.Current.User.Identity; 
var userName = user.Impersonate(); 
+0

कुछ शोध करने के बाद, मुझे पता चला कि AJAX से एक कॉल ब्राउज़र से मेरी पहचान लेगा, लेकिन आईआईएस के माध्यम से यह एप्लिकेशन पूल ले जाएगा। आईआईएस के लिए समाधान प्रतिरूपण का उपयोग करना है और मैं अब उसमें देख रहा हूं। – arame3333

+0

@ arame3333 अगर आप प्रतिरूपण जोड़ना चाहते हैं तो दूसरे कोड का उपयोग करें, लेकिन इस भाग को var userName = user.Impersonate() जोड़ें। मैंने इसे –

+0

@ arame3333 शामिल करने के लिए उत्तर संपादित किया है, आप इस लिंक को देख सकते हैं, यहां एक समान प्रश्न है [अनुरोध के साथ प्रमाण पत्र प्राप्त करें] (https://stackoverflow.com/questions/12212116/how-to-get-httpclient-to -पास-क्रेडेंशियल-साथ-अनुरोध के साथ/12675503 # 12675503) –

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