5

イントラネット環境で動作する 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 サーバーでの実行時に偽装が機能しない理由はありますか?

4

3 に答える 3

4

ここで答えを見つけました:

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

「Kerberos は負荷分散アーキテクチャでは機能せず、IIS は NTLM 認証に戻ります。委任に NTLM を使用できないため、委任を必要とするアプリケーションまたはサービスは機能しません。詳細については、次の記事番号をクリックして、マイクロソフトの記事」

まさにその通りでした。負荷分散されていない別のマシンで試してみましたが、動作します。

まだ私を驚かせている唯一のことは、アイデンティティの ImpersonationLevel がまだImpersonateないことDelegateです...

于 2012-06-21T08:18:09.130 に答える
2

<identity impersonate="true"/>web.config で設定した後、次のことを試してください。

using (((WindowsIdentity)User.Identity).Impersonate())
using (var client = new WebClient { Credentials = CredentialCache.DefaultNetworkCredentials })
{
    string result = client.DownloadString("http://sharepoint");
}
于 2012-06-18T09:19:04.083 に答える
1

偽装を機能させるには、IIS でサイトを正しく構成する必要があります。

ASP.NET 偽装認証の構成 (IIS 7)を参照してください。

于 2012-06-18T09:19:59.980 に答える