ログオンしているユーザーを偽装してからuncファイルにアクセスする際に問題が発生しました。私は、このサンプルコードを使用して試してみました:ログインしているユーザーを偽装して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、問題ではない、魅力のように動作します!
問題は、パスワードを提供する必要があり、私がチェックしたいユーザーがログオンしているため、提供できないということです。
アプリケーションがこのように動作する理由を知っている人はいますか?設定が必要な設定ですか?
例外が伝播するのを防ぐために、キャッチしてログに記録しないようにしてください。クール! –
あなたは現在のユーザーアカウントではなくASP.NETアカウントを偽装しています。あなたのautheticationモードは何ですか?また、web.configで偽装を指定していますか? – 2GDev
@Davide:サンプルコードだと思う...ここをチェック:http://stackoverflow.com/questions/4334665/steps-to-enable-double-hop-delegation-in-iis7-windows-2008、そしてここにhttp://stackoverflow.com/questions/983443/windowsidentity-winid-windowsidentityhttpcontext-current-user-identity-how-tここにソースがあります。http://msdn.microsoft.com/en-us/library/ms998351 .aspx#paght000023_windowsidentityを使用してインパクトする – 2GDev