好吧,我花了大約15個小時試圖解決這個問題,我終於辭職在這裏發帖試圖讓它得到解決。我知道這篇文章很長,但是我已經完成了所有正常的事情,我會被告知試試,所以我想確保它很明確,所以我們不會浪費時間。SharePoint 2013/IIS 7.5模擬/授權/雙躍點
我有一臺運行在ESXi 5.0服務器上的Win Server 2008 R2虛擬機。在此服務器上,我安裝了SharePoint Foundation 2013預覽以及所有預先請求等。我正在運行這一臺服務器(MSSQL,IIS 7.5,SharePoint服務)上的所有內容,因爲我們的用法非常有限,只有大約30個用戶。我迫切需要添加到SharePoint的一件事是用戶能夠修改他們在Active Directory(Server 2003)中的信息,因爲我們的AD幾乎沒有人工填充並且已經過時。我發現了一個完美的WebPart,它對於編輯用戶非常有用。
當我想配置WebPart以允許用戶只編輯自己時,問題就出現了。 WebPart(正確)在C#.NET中使用這一行代碼。獲取當前通過IIS中的Windows身份驗證進行身份驗證的身份。相反,這是返回本地用戶NT AUTHORITY/IUSR。 (我知道這對任何人都不是新聞)。
System.Security.Principal.WindowsIdentity.GetCurrent().Name;
於是我開始我的研究,並確保下面的事情。
在我的web.config SharePoint的,我有以下幾點:
<authentication mode="Windows" />
<identity impersonate="true" />
在IIS中,我對IIS網站的以下身份驗證設置哪些安裝我的SharePoint安裝:
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。每一步之後,我檢查了應用程序行爲的任何變化,但從未找到任何變化。
總之我做了以下內容:
- 我成立了一個域用戶帳戶來運行應用程序池。爲了測試,我讓這個用戶成爲Domain Admins組的成員。
- 我把web.config中的一行改爲
<add key="aspnet:AllowAnonymousImpersonation" value="false" />
(這是真的)。這阻止了NT AUTHORITY \ IUSR用戶運行該應用程序,而是在我創建的用於運行應用程序池的域帳戶下運行。我現在可以登錄到SharePoint並訪問我的WebPart,但是,正如所料,它向我展示了運行App Pool的域用戶的AD信息,而不是通過身份驗證的域用戶。所以我知道WebPart正在工作,並具有必要的權限等,但System.Security.Principal.WindowsIdentity.GetCurrent().Name;
仍然返回運行應用程序池即用戶。模擬仍然不起作用 - 在AD用戶和計算機中,我授予
Trust this computer for delegation to any service
這個虛擬服務器全部運行。 - 由於我沒有運行應用程序池的域用戶帳戶的「委派」選項卡,我必須爲用戶註冊一個SPN。在註冊了我從服務器的SPN列表中複製的所有SPN以及我在網上找到的幾個http SPN之後,還對用戶設置了
Trust this user for delegation to any service
後,應用程序的行爲沒有發生變化。 - 我確保我登錄的域用戶不受委派保護
- 我進入SharePoint服務器上的本地策略編輯器,並確保運行應用程序池的域用戶被允許「部分操作系統「和」身份驗證後模擬客戶端「。
- 其他的事情我想
- 添加
Negotiate:Kerberos
作爲Windows驗證身份驗證提供的IIS網站上 - 確認這兩條線在SharePoint web.config中的存在:
- 添加
以下是我在DC上的SPN記錄:
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
我也在整個過程中重新啓動了服務器和IIS。仍然當我登錄時,我的Web部件將我標識爲運行應用程序池的用戶。我知道有類似使用經典模式應用程序池的工作,但不推薦使用。還有其他一些方法可以在.NET中獲得正確的名稱,但我不想更改Web部件,更重要的是,這是正確的方式,我應該能夠使其工作。我不想不斷地解決它。
如果任何人有任何更多的想法可能會導致問題,我很樂意聽到他們。
我只是想更新這篇文章。我還沒有找到一個解決方案,似乎也沒有任何人爲別人敲響鐘聲。同時,我更改了Web部件中的代碼以獲得如下用戶: 'SPSite site = new SPSite(SPContext.Current.Web.Url.ToString());' 'SPWeb web = site .OpenWeb(「/」);' 'SPUser user = web.CurrentUser;' – user456151 2012-08-07 15:53:15