イントラネット環境で動作する ASP.NET 4.0 MVC3 Web アプリケーションに取り組んでいます。アプリケーションは Windows 認証を利用します。そのアプリケーション プールは、ドメイン コントローラーに設定された spn を持つドメイン ユーザーによって実行されます。認証は Kerberos を使用して機能します (IE および Firefox では、いくつかの追加構成を行った後)。
ファイルをsharepointにアップロードしたいのですが、現在アプリケーションにログインしているユーザーとしてファイルをアップロードすることが重要です(したがって、ファイルはSharepointで資格情報を使用して作成されます)。
ResourceExists(Uri uri)
関数に次のコードがあります。
'...
Dim identity As System.Security.Principal.WindowsIdentity = HttpContext.User.Identity
Dim impersonationContext = identity.Impersonate()
response = request.GetResponse()
impersonationContext.Undo()
'...
これはローカルで実行している場合は機能しますが、サーバーにデプロイすると例外が発生します。
System.Net.WebException: The remote server returned an error: (401) Unauthorized.\r\n at WebDav.WebDavClient.ResourceExists(Uri uri)\r\n at Website.Website.WebdavController.Upload(HttpPostedFileBase file, UploadViewModel vm)
NTLMでは不可能な資格情報の受け渡しについて何か読んだことがありますが、Kerberosを使用していると確信しています(wiresharkとfiddlerでヘッダーを確認しました)。次のように表示されます。
Authorization: Negotiate YIIFpQYGKwYBBQUCoIIFmTCCBZWgJDAiBgkqhkiC9x...
IIS サーバーでの実行時に偽装が機能しない理由はありますか?