2011-03-08 11 views
9

साइट मेरे स्थानीय आईआईएस 6.1 पर चल रही है। मैं अपने एडी से जानकारी खींचने के लिए कुछ विशेषताओं को जोड़ना चाहता हूं। मेरा एडी कोड कई अन्य परियोजनाओं और मेरे देव सर्वर पर काम करता है। यहाँ उपयोगकर्ता नाम लिखने पर मेरे प्रयास कर रहे हैं:वर्तमान उपयोगकर्ताओं को कैसे प्राप्त करें विंडोज पहचान

Response.Write("1. " + this.Request.LogonUserIdentity.Name); 
Response.Write("2. " + Request.ServerVariables["Auth_User"]); 
Response.Write("3. " + WindowsIdentity.GetCurrent().Name.ToString()); 

परिणाम मैं कर रहे हैं:

  1. NT AUTHORITY \ IUSR
  2. व्यवस्थापक
  3. NT AUTHORITY \ NETWORK सेवा

मैं वास्तविक विंडोज उपयोगकर्ता नाम जैसे हमारे डोमेन/उपयोगकर्ता नाम

पर कैसे प्राप्त कर सकता हूं

धन्यवाद

उत्तर

2

यह स्निपेट से पता चलता LogonUserIdentity कैसे सेट किया गया है (परावर्तक का उपयोग कर)

if ((this._wr is IIS7WorkerRequest) && (((this._context.NotificationContext.CurrentNotification == RequestNotification.AuthenticateRequest) && !this._context.NotificationContext.IsPostNotification) || (this._context.NotificationContext.CurrentNotification < RequestNotification.AuthenticateRequest))) 
     { 
      throw new InvalidOperationException(SR.GetString("Invalid_before_authentication")); 
     } 
     IntPtr userToken = this._wr.GetUserToken(); 
     if (userToken != IntPtr.Zero) 
     { 
      string serverVariable = this._wr.GetServerVariable("LOGON_USER"); 
      string str2 = this._wr.GetServerVariable("AUTH_TYPE"); 
      bool isAuthenticated = !string.IsNullOrEmpty(serverVariable) || (!string.IsNullOrEmpty(str2) && !StringUtil.EqualsIgnoreCase(str2, "basic")); 
      this._logonUserIdentity = CreateWindowsIdentityWithAssert(userToken, (str2 == null) ? "" : str2, WindowsAccountType.Normal, isAuthenticated); 
     } 

आप आईआईएस 7. के लिए यह देख बदल दिया गया है सकते हैं मेरा मानना ​​है कि आप विंडोज प्रमाणीकरण + प्रतिरूपण उपयोग कर रहे हैं तो मैं के साथ पिछले एक (WindowsIdentity.GetCurrent()) के साथ जाऊंगा, जो मुझे यकीन है कि पहचान अनुरोध चल रहा है।

15

यहां दो अलग-अलग विंडोज उपयोगकर्ता हैं - पहला आपका एप्लिकेशन उपयोगकर्ता है और दूसरा उपयोगकर्ता (या विंडोज खाता) है जिसके तहत आपका एएसपी.NET एप्लिकेशन (आईआईएस परिप्रेक्ष्य से एप्लिकेशन पूल) चल रहा है। WindowsIdentity.GetCurrent आम तौर पर इस संदर्भ को वापस कर देगा।

एप्लिकेशन का उपयोग करने वाले वास्तविक विंडोज उपयोगकर्ता प्राप्त करने के लिए, आपको प्रमाणीकरण लागू करना होगा। ऐसा करने के लिए, आप आईआईएस में कहा गया वेब साइट के लिए एकीकृत प्रमाणीकरण (विंडोज प्रमाणीकरण) सक्षम कर सकते हैं। विंडोज प्रमाणीकरण का उपयोग करने के लिए अपने एएसपी.NET विन्यास को भी संशोधित करें। अब आप वास्तविक उपयोगकर्ता प्राप्त करने के लिए HttpContext.Current.User.Identity का उपयोग कर सकते हैं।

-3

क्या उपयोगकर्ता अपने एडी डोमेन/उपयोगकर्ता नाम का उपयोग कर साइट पर लॉग इन कर रहा है, तो उस बिंदु पर उपयोगकर्ता नाम/डोमेन को पकड़ लें?

यदि नहीं, तो आप इसे प्राप्त नहीं कर पाएंगे, अगर कोई यादृच्छिक वेबसाइट मौजूदा उपयोगकर्ताओं के डोमेन/उपयोगकर्ता नाम को पकड़ सकती है तो यह एक बड़ी सुरक्षा समस्या होगी?

3

HttpContext.Current.User.Identity यहां आपके लिए उपयोग किया जा सकता है।

इसी तरह System.Threading.Thread.CurrentPrincipal मदद कर सकता है।

लेकिन मामला यह हो सकता है कि उपयोगकर्ता को वास्तव में एक पहचान उदाहरण सेट करना होगा क्योंकि उपयोगकर्ता लॉग इन करता है (हालांकि IPrincipal और आसपास के तंत्र को लागू नहीं किया गया है, बल्कि अंतर्निहित WindowsIdentity कार्यान्वयन का उपयोग करके)।

मैं इस पर 100% प्रतिशत नहीं हूं, विंडोज प्रमाणीकरण आपके लिए इसे स्वचालित रूप से पुनर्प्राप्त करने के लिए स्वचालित रूप से सेट कर सकता है।

इसके अलावा

, this link from MSDN जो बुनियादी उपयोगकर्ता कार्यों का वर्णन की जाँच,

0

सबसे पहले, यह सुनिश्चित करें कि वेबसाइट इंट्रानेट ज़ोन (जैसे सिर्फ http://servername/ बजाय http://www.servername.com/) के भीतर है बना सकते हैं या आप विश्वसनीय आईईएस के लिए अपने FQDN जोड़ने की जरूरत साइट सुरक्षा सेटिंग्स।

दूसरा, यदि आप इंट्रानेट ज़ोन का उपयोग नहीं कर रहे हैं, तो सुनिश्चित करें कि आईई प्रमाण पत्र भेज रहा है - टूल्स -> इंटरनेट विकल्प -> सुरक्षा -> कस्टम स्तर -> उपयोगकर्ता प्रमाणीकरण -> लॉगऑन -> वर्तमान उपयोगकर्ता नाम के साथ स्वचालित लॉगऑन और पासवर्ड