ログオンしているユーザーになりすまして、uncファイルにアクセスするのに問題があります。私はこのサンプルコードを使ってみました:
using System.Security.Principal;
...
// Obtain the authenticated user's Identity
WindowsIdentity winId = (WindowsIdentity)HttpContext.Current.User.Identity;
WindowsImpersonationContext ctx = null;
try
{
// Start impersonating
ctx = winId.Impersonate();
// Now impersonating
// Access resources using the identity of the authenticated user
}
// Prevent exceptions from propagating
catch{}
finally
{
// Revert impersonation
if (ctx != null)
ctx.Undo();
}
// Back to running under the default ASP.NET process identity
コメントに「認証されたユーザーのIDを使用してリソースにアクセスする」と書かれているファイルにローカルでアクセスしようとすると、正しく機能します。ただし、\\ ServerName \ Share \ FileName.txtなどのUNCを使用して、ファイルサーバー上のファイルで同じことを行おうとすると、偽装されたアカウントに十分な権限があるかどうかは関係ありません。アプリケーションは、ASP.NETアカウントに十分な権限がないという例外をスローします。
また、管理されていないコードを使用して偽装を実行しようとしましたが、機能します。ローカルファイルまたはUNCは、問題ではなく、魅力のように機能します。
問題は、パスワードを入力する必要があることです。これはログオンしているユーザーの権利であるため、確認したいので、パスワードを入力できません。
アプリケーションがこのように動作する理由を誰かが知っていますか?設定する必要のある構成設定ですか?