6

好吧,我花了大約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。每一步之後,我檢查了應用程序行爲的任何變化,但從未找到任何變化。

總之我做了以下內容:

  1. 我成立了一個域用戶帳戶來運行應用程序池。爲了測試,我讓這個用戶成爲Domain Admins組的成員。
  2. 我把web.config中的一行改爲<add key="aspnet:AllowAnonymousImpersonation" value="false" />(這是真的)。這阻止了NT AUTHORITY \ IUSR用戶運行該應用程序,而是在我創建的用於運行應用程序池的域帳戶下運行。我現在可以登錄到SharePoint並訪問我的WebPart,但是,正如所料,它向我展示了運行App Pool的域用戶的AD信息,而不是通過身份驗證的域用戶。所以我知道WebPart正在工作,並具有必要的權限等,但System.Security.Principal.WindowsIdentity.GetCurrent().Name;仍然返回運行應用程序池即用戶。模擬仍然不起作用
  3. 在AD用戶和計算機中,我授予Trust this computer for delegation to any service這個虛擬服務器全部運行。
  4. 由於我沒有運行應用程序池的域用戶帳戶的「委派」選項卡,我必須爲用戶註冊一個SPN。在註冊了我從服務器的SPN列表中複製的所有SPN以及我在網上找到的幾個http SPN之後,還對用戶設置了Trust this user for delegation to any service後,應用程序的行爲沒有發生變化。
  5. 我確保我登錄的域用戶不受委派保護
  6. 我進入SharePoint服務器上的本地策略編輯器,並確保運行應用程序池的域用戶被允許「部分操作系統「和」身份驗證後模擬客戶端「。
  7. 其他的事情我想
    • 添加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部件,更重要的是,這是正確的方式,我應該能夠使其工作。我不想不斷地解決它。

如果任何人有任何更多的想法可能會導致問題,我很樂意聽到他們。

+0

我只是想更新這篇文章。我還沒有找到一個解決方案,似乎也沒有任何人爲別人敲響鐘聲。同時,我更改了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

回答