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

回答