我有一个作为 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 不应该至少包含模拟用户的用户名吗?