ठीक है, मैंने इस समस्या को हल करने के लिए लगभग 15 घंटे बिताए हैं और अंततः इसे हल करने के लिए यहां पोस्ट करने के लिए मुझे इस्तीफा दे दिया गया है। मुझे पता है कि यह पोस्ट बहुत लंबा है लेकिन मैंने उन सभी सामान्य चीजों को किया है जिन्हें मैं कोशिश करने के लिए कहा जा रहा हूं, इसलिए मैं यह सुनिश्चित करना चाहता हूं कि यह स्पष्ट है इसलिए हम उस पर समय बर्बाद नहीं करते हैं।शेयरपॉइंट 2013/आईआईएस 7.5 प्रतिरूपण/प्रतिनिधि/डबल हॉप
मेरे पास एक ESXi 5.0 सर्वर पर होस्ट की गई एक विन सर्वर 2008 R2 वर्चुअल मशीन है। इस सर्वर पर मैंने शेयरपॉइंट फाउंडेशन 2013 पूर्वावलोकन के साथ-साथ सभी प्री-रिक्यूसाइट्स आदि स्थापित किए हैं। मैं इस सर्वर (एमएसएसएलएल, आईआईएस 7.5, शेयरपॉइंट सेवाओं) से सब कुछ चला रहा हूं क्योंकि हमारे पास बहुत सीमित उपयोग होगा और केवल 30 उपयोगकर्ता होंगे। शेयरपॉइंट में जोड़ने के लिए मुझे जरूरी एक चीज है जो उपयोगकर्ताओं को सक्रिय निर्देशिका (सर्वर 2003) में अपनी जानकारी संशोधित करने की क्षमता है क्योंकि हमारे एडी मुश्किल से आबादी में है और पुराना है। मुझे एक आदर्श वेबपार्ट मिला है और यह उपयोगकर्ताओं को संपादित करने के लिए अद्भुत काम करता है।
समस्या तब होती है जब मैं वेबपर्ट को कॉन्फ़िगर करना चाहता हूं ताकि उपयोगकर्ता को केवल स्वयं को संपादित कर सकें। वेबपार्ट (ठीक से) सी # .NET में कोड की इस पंक्ति का उपयोग करता है। वर्तमान में लॉग इन पहचान प्राप्त करने के लिए जो आईआईएस में विंडोज प्रमाणीकरण के साथ प्रमाणित था। इसके बजाए, यह स्थानीय उपयोगकर्ता एनटी प्राधिकरण/आईयूएसआर वापस कर रहा है। (मुझे पता है कि यह किसी के लिए खबर नहीं है)।
System.Security.Principal.WindowsIdentity.GetCurrent().Name;
तो मैं अपने अनुसंधान शुरू किया और निम्नलिखित बातें के बारे में सुनिश्चित कर दिया।
SharePoint के लिए मेरे web.config में, मैं निम्नलिखित है:
<authentication mode="Windows" />
<identity impersonate="true" />
आईआईएस में, मैं आईआईएस वेबसाइट के लिए निम्नलिखित प्रमाणीकरण सेटिंग्स जो मेरे शेयरपॉइंट स्थापना घर:
Anonymous Authentication Disabled
ASP.NET Impersonation Enabled
Basic Authentication Disabled HTTP 401 Challenge
Digest Authentication Disabled HTTP 401 Challenge
Forms Authentication Disabled HTTP 302 Login/Redirect
Windows Authentication Enabled HTTP 401 Challenge
इसलिए मुझे पता है कि साइट अभी भी अज्ञात उपयोगकर्ता के साथ लॉग इन कर रही है, भले ही मेरे पास अनाम प्रमाणीकरण अक्षम है। मुझे डबल-हॉप मुद्दे के बारे में जानकारी मिली जो मेरी समस्याओं से मेल खाता है और मैं इस लिंक में आया और इस पोस्ट में सभी निर्देशों का पालन किया: http://blogs.technet.com/b/taraj/archive/2009/01/29/checklist-for-double-hop-issues-iis-and-sql-server.aspx। प्रत्येक चरण के बाद, मैंने आवेदन के व्यवहार में किसी भी बदलाव की जांच की लेकिन कभी भी कोई नहीं मिला।
- मैं अनुप्रयोग पूल चलाने के लिए एक डोमेन उपयोगकर्ता खाता सेट:
सारांश में मैं निम्नलिखित किया था। परीक्षण के लिए, मैंने इस उपयोगकर्ता को डोमेन व्यवस्थापक समूह का सदस्य बनाया है।
- मैंने web.config में
<add key="aspnet:AllowAnonymousImpersonation" value="false" />
(यह सच था) में एक पंक्ति बदल दी। इसने NT AUTHORITY \ IUSR उपयोगकर्ता को एप्लिकेशन चलाने से रोक दिया और इसके बजाय यह ऐप पूल चलाने के लिए बनाए गए डोमेन खाते के अंतर्गत चला गया। अब मैं शेयरपॉइंट में लॉग इन कर सकता हूं और अपने वेबपार्ट तक पहुंच सकता हूं, हालांकि उम्मीद के अनुसार, उसने मुझे डोमेन उपयोगकर्ता के बजाय एडी पूल चलाने वाले डोमेन उपयोगकर्ता के लिए एडी जानकारी प्रदान की थी। तो मुझे पता है कि वेबपार्ट काम कर रहा है और आवश्यक अनुमतियां आदि हैं लेकिनSystem.Security.Principal.WindowsIdentity.GetCurrent().Name;
अभी भी ऐप पूल यानी उपयोगकर्ता चलाने वाले उपयोगकर्ता को वापस कर रहा है।प्रतिरूपण अभी भी काम नहीं कर रहा है - एडी उपयोगकर्ता और कंप्यूटर में, मैंने वर्चुअल सर्वर के लिए
Trust this computer for delegation to any service
प्रदान किया है, यह सब चलता है। - चूंकि मेरे पास ऐप पूल चलाने वाले डोमेन उपयोगकर्ता खाते के लिए "प्रतिनिधिमंडल" टैब नहीं था, इसलिए मुझे उपयोगकर्ता के लिए एक एसपीएन पंजीकृत करना पड़ा। एसपीएन की सर्वर की सूची से कॉपी किए गए सभी एसपीएन पंजीकृत करने के बाद और कुछ ऑनलाइन http एसपीएन जिन्हें मैंने ऑनलाइन पाया, और उपयोगकर्ता पर
Trust this user for delegation to any service
सेट करने के बाद, एप्लिकेशन के व्यवहार में कोई बदलाव नहीं आया। - मैंने यह सुनिश्चित किया कि जिस डोमेन उपयोगकर्ता के साथ मैं लॉग इन कर रहा था उसे प्रतिनिधिमंडल से सुरक्षित नहीं किया गया था
- मैं शेयरपॉइंट सर्वर पर स्थानीय नीति संपादक में गया और मैंने सुनिश्चित किया कि ऐप पूल चलाने वाले डोमेन उपयोगकर्ता को " ऑपरेटिंग सिस्टम का हिस्सा "और" प्रमाणीकरण के बाद एक ग्राहक का प्रतिरूपण "।
- अन्य चीजें मैंने कोशिश की
- आईआईएस वेबसाइट पर विंडोज प्रमाणीकरण के लिए एक प्रमाणीकरण प्रदाता के रूप में
Negotiate:Kerberos
जोड़े SharePoint web.config में इन दो पंक्तियों के
- की पुष्टि की उपस्थिति:
- आईआईएस वेबसाइट पर विंडोज प्रमाणीकरण के लिए एक प्रमाणीकरण प्रदाता के रूप में
नीचे डीसी पर मेरे एसपीएन रिकॉर्ड हैं:
setspn -l SPserver
Registered ServicePrincipalNames for CN=SPserver,CN=Computers,DC=DOMAIN,DC=local:
MSSQLSvc/SPserver.DOMAIN.local:appPoolUser
WSMAN/SPserver
WSMAN/SPserver.DOMAIN.local
TERMSRV/SPserver
TERMSRV/SPserver.DOMAIN.local
RestrictedKrbHost/SPserver
HOST/SPserver
RestrictedKrbHost/SPserver.DOMAIN.local
HOST/SPserver.DOMAIN.local
setspn -l appPoolUser
Registered ServicePrincipalNames for CN=appPoolUser,OU=Utility,OU=Users,OU=Company Name,DC=DOMAIN,DC=local:
http/subdomain.domain.com
http/SPserver.DOMAIN.local
RestrictedKrbHost/appPoolUser.DOMAIN.local
RestrictedKrbHost/appPoolUser
MSSQLSvc/appPoolUser.DOMAIN.local:appPoolUser
HOST/appPoolUser
HOST/appPoolUser.DOMAIN.local
मैंने इस प्रक्रिया में सर्वर और आईआईएस को कई बार फिर से शुरू किया। फिर भी जब मैं लॉग इन करता हूं, तो मेरा वेब पार्ट मुझे एप्लिकेशन पूल चलाने वाले उपयोगकर्ता के रूप में पहचानता है। मुझे पता है कि क्लासिक मोड ऐप पूल का उपयोग करने के आसपास काम कर रहे हैं लेकिन यह बहिष्कृत है। .NET में सही नाम पाने के अन्य तरीके भी हैं, लेकिन मैं वेब पार्ट को और अधिक महत्वपूर्ण रूप से नहीं बदलना चाहता हूं, यह करने का सही तरीका है और मुझे इसे काम करने में सक्षम होना चाहिए। मैं लगातार इसके आसपास काम नहीं करना चाहता हूं।
अगर किसी के पास समस्या का कारण हो सकता है तो कोई और विचार है, तो मैं उन्हें सुनना चाहूंगा।
मैं बस इस पोस्ट को अपडेट करना चाहता था। मुझे अभी भी एक संकल्प नहीं मिला है और ऐसा लगता है कि किसी और के लिए किसी भी चीज को घंटी बजाना नहीं है। इस बीच, मैंने उपयोगकर्ता को इस तरह के उपयोगकर्ता को प्राप्त करने के लिए वेब पार्ट में कोड बदल दिया है: 'एसपीएससाइट साइट = नया एसपीएससाइट (SPContext.Current.Web.Url.ToString());' 'SPWeb वेब = साइट ओपेनवेब ("/"); ' ' SPUser उपयोगकर्ता = web.CurrentUser; ' – user456151