「ASP.NET アプリケーションで偽装を実装する方法」に関するこの MSDNの記事では、Web 要求の実行に使用されるアカウントを変更する 4 つの異なる方法がリストされています。残念ながら、これらの代替案の違いについては説明していません。
IIS 認証ユーザーになりすまして、ローカル マシンからいくつかのファイルをコピーしようとしています。WIN32 API を使用しLogonUserA
て特定のユーザーになりすますと機能します。しかし、多くのユーザーと連携するには webapp が必要です (全員のファイルにアクセスできるアカウントを持っていません)。
Impersonate = "true" を設定して IIS を構成するだけでうまくいくと思いましたが、何かが違います。Environment.UserName を確認すると、正しいアカウントを偽装しているように見えますが、「アクセスが拒否されました」というエラーが表示されます。
これらの偽装方法の違いを知っている人はいますか? IIS で認証されたユーザーになりすまして、ファイル操作を行うことはできますか?
更新: 私が得たフィードバックから、私が直面していることをより明確にする必要があります。
環境設定: IIS: 匿名認証を無効にし、統合 Windows 認証を有効にします ASP.Net の web.config: authentication mode = "windows", impersonate = true, deny anonymous users
「userA」としてページにアクセスしているとします。
シナリオ 1 : IIS 認証ユーザーを偽装する
try{
File.Copy(srcFile, destFile); // Access Denied even though userA has access to srcFile.
} catch(Exception ex) {
...
}
シナリオ 2 : LogonUser で userA を偽装する
try{
// Impersonater is a wrapper around the WIN32 LogonUser API
using(Impersonater imp = new Impersonator("domain", "userA", "pwd"))
{
File.Copy(srcFile, destFile); // Works
}
} catch(Exception ex) {
...
}
どちらの場合も、「userA」になりすましています。