私はそのユーザーを偽装することに成功しました。 LogonUser Interopを使用します(例:ASP.NETは私の権限を尊重することを拒否します。
[DllImport("advapi32.dll", SetLastError = true)]
static extern bool LogonUser(
string principal,
string authority,
string password,
LogonSessionType logonType,
LogonProvider logonProvider,
out IntPtr token);
これは問題なく動作します。私が直接ウィンドウに行き、WindowsIdentity.GetCurrent().Name
と入力すると、偽装されたユーザーがCurrentUserとして表示されます。このユーザーを解放すると、私の実際のユーザーに戻ります。ここに問題はありません。私はです。は偽装しています。私は、ユーザーがアクセス権を持っていることを共有にファイルを書き込もうとするとき
はしかし、私が取得:
Access to the path [path name] denied.
。
私は偽装しているユーザーとして手動でWindowsにログインできました。ナビゲーションして、ファイルを共有に書き込んでいます。ユーザーは、私が対象としているディレクトリへの管理権限を持っています。
私はエンドユーザーがファイルをアップロードできるようにしており、HttpPostedFileBase
オブジェクトを使用してこの共有にファイルを書き込みます。基本的には、ファイルをアップロードするために偽装をコードのブロックに制限しています。完了後、元の認証されたLDAPユーザーに戻ります。
imp = Impersonation.ImpersonateUser("someuser","somepassword");
HttpPostedFileBase hpf = Request.Files[file] as HttpPostedFileBase;
...
hpf.SaveAs(path);
Impersonation.StopImpersonating(imp);
パスは正しいです。
SaveAs
メソッドを使用してファイルを保存すると、偽装を尊重していますか?
私が気付いていない別のアカウントでファイルを書き込もうとしていますか?もしそうなら、私はこれをどのように変更できますか?
SaveAs
メソッドを使用すると、全体的に多くの制御がないように見えます。単一の過負荷ではありません。このオブジェクトを使用して自分の資格情報をより詳細に制御できる他の方法がありますか?
authoritayが間違っています。 ;) –
ターゲットマシンのイベントログを調べて、アクセス拒否またはログインエラーがあったかどうかを確認しましたか? – NotMe
私は以下のようにダブルホップを調査しましたか? – ironsam