SharePoint 2013 / IIS 7.5模拟/委派/双跳

时间:2012-08-06 13:39:44

标签: sharepoint iis-7.5 windows-authentication impersonation delegation

好的,我花了大约15个小时试图解决这个问题,我终于辞职了,试图解决这个问题。我知道这个帖子很长但是我已经做了所有正常的事情,我将被告知尝试这样做,我想确保它很清楚,所以我们不要浪费时间。< / p>

我在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 for SharePoint中,我有以下内容:

  
    

<authentication mode="Windows" />     <identity impersonate="true" />

  

在IIS中,我为安装SharePoint的IIS网站提供了以下身份验证设置:

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,但是正如预期的那样,它向我提供了运行应用程序池的域用户的AD信息,而不是经过身份验证的域用户。所以我知道WebPart正在运行并具有必要的权限等,但System.Security.Principal.WindowsIdentity.GetCurrent().Name;仍在返回运行应用程序池的用户,即。冒充仍然无法正常工作
  3. 在AD用户和计算机中,我为所有运行的虚拟服务器授予了Trust this computer for delegation to any service
  4. 因为我没有&#34;代表团&#34;运行应用程序池的域用户帐户的选项卡,我必须为该用户注册SPN。在注册了我从服务器的SPN列表中复制的所有SPN以及我在网上找到的几个http SPN,并且还在用户上设置Trust this user for delegation to any service之后,应用程序的行为没有变化。
  5. 我确保我登录的域用户未受到委派
  6. 的保护
  7. 我进入了SharePoint服务器上的本地策略编辑器,我确保运行应用程序池的域用户被允许&#34;作为操作系统的一部分&#34;和#34;在身份验证后模拟客户端&#34;。
  8. 我试过的其他事情
    • 在IIS网站上添加Negotiate:Kerberos作为Windows身份验证的身份验证提供程序
    • 在SharePoint web.config中确认存在这两行:
  9. 以下是我在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部件,更重要的是,这是正确的方法,我应该能够使它工作。我不想继续解决它。

    如果有人对可能导致问题的原因有任何疑问,我很乐意听到。

1 个答案:

答案 0 :(得分:1)

不确定您是否还有问题,以下帖子可能有所帮助。 Double Hop Impersonation, Protocol Transitioning and Constrained Delegation in ASP.NET 4