ASP.NET:无法模拟调用者(2跳?)

时间:2012-06-20 10:47:14

标签: asp.net security impersonation kerberos

我有一个MVC3网络应用程序,它作为DOMAIN \ USER1帐户运行。此用户在AD集中具有SPN,并且受信任以进行委派。

我希望此应用程序代表调用者访问sharepoint服务器并为她/他上传文件。我使用以下代码

Dim request = HttpWebRequest.Create(http://sharepoint.domain.com)

request.Method = WebRequestMethods.Http.Head
request.PreAuthenticate = True
Dim identity = New WindowsIdentity(callerName & "@domain.com")
Dim impContext = identity.Impersonate()
'###### At this point identity.ImpersonationLevel is `Impersonate` not `Delegate`

request.Credentials = CredentialCache.DefaultNetworkCredentials
'###### DefaultNetworkCredentials is empty (Username, domain and password are all empty strings)

Dim response As HttpWebResponse

Try
    response = request.GetResponse()
    Return JsonSuccess()
Catch ex As WebException

    '###### I get 401 Unauthorized exception
    Return JsonError(ex.Message)
Finally
    impContext.Undo()
End Try

我的问题是。此时的模拟级别应该是Impersonate还是Delegate(Sharepoint在与IIS服务器不同的计算机上运行)? 在AD中,我还为sharepoint和HTTP配置了协议转换,因此在发出请求后,Impersonate可能会更改为Delegate吗?我不知道,指导将不胜感激。

另一个问题是 - CredentialCache.DefaultNetworkCredentials是否应该至少包含模拟用户的用户名?

1 个答案:

答案 0 :(得分:0)

我在这里找到了答案:

http://support.microsoft.com/kb/810572

“Kerberos在负载均衡的体系结构中不起作用,IIS会回退到NTLM身份验证。由于您无法使用NTLM进行委派,因此任何需要委派的应用程序或服务都不起作用。有关更多信息,请单击下面的文章编号查看Microsoft“

中的文章

情况确实如此。我现在尝试使用另一台没有负载平衡的机器,它可以工作。

我唯一感到惊讶的是,身份的ImpersonationLevel仍为Impersonate而不是Delegate ......