【问题标题】:ASP.NET: cannot impersonate the caller (2-hop?)ASP.NET:无法模拟调用者(2 跳?)
【发布时间】:2012-06-22 11:49:50
【问题描述】:

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

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

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 中,我还为共享点和 HTTP 配置了协议转换,所以 Impersonate 在发出请求后应该更改为 Delegate?我不知道,将不胜感激。

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

【问题讨论】:

    标签: asp.net security impersonation kerberos


    【解决方案1】:

    我在这里找到了答案:

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

    “Kerberos 在负载平衡的体系结构中不起作用,IIS 退回到 NTLM 身份验证。由于您不能使用 NTLM 进行委派,因此任何需要委派的应用程序或服务都不起作用。有关详细信息,请单击以下文章编号在微软查看文章”

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-24
      • 1970-01-01
      • 1970-01-01
      • 2020-07-28
      • 2023-03-31
      相关资源
      最近更新 更多