3

「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」になりすましています。

4

2 に答える 2

3

Q:これらの偽装方法の違いを知っている人はいますか?

A:最初に、IIS が要求を処理する方法について背景を説明します。

IIS サーバーがファイル アクセスを処理するために使用するIUSR_ computername (IIS6 のデフォルト)という特定のシステム ユーザーがあります。また、ASPNET または NetworkService というアカウントで実行される Aspnet_wp.exe という IIS サーバー上で実行されているプロセスがあります。

そのため、サーバーに対して要求が行われると、IIS が反応し、要求が ASP.NET アプリケーションに対するものである場合は、その要求をそのプロセスに渡します。

これは、IIS サーバーが IUSR_ computername (匿名) アクセス方法を使用するようにセットアップされている場合を意味します。サーバーはそのアカウントを使用して要求を処理し、それが ASP.NET アプリケーションであることを確認すると、要求を ASP.NET プロセスに転送します。

デフォルトでは、偽装は無効になっています。これは、ASP.NET プロセスが要求を処理するときに、ASPNET または NetworkService アカウントで要求が実行されることを意味します。

次に、偽装方法の違いについて説明します。

  • IIS で認証されたアカウントまたはユーザーを偽装する IIS
    が使用するように設定されているアカウントを使用します。通常は IUSR_ computernameです。
    使用法:<identity impersonate="true" />

  • 特定の ID に対して有効な偽装
    指定された特定のアカウントを使用します。
    使用法:<identity impersonate="true" userName="accountname" password="password" />

3 番目のオプションは、偽装を無効にする既定の状態です。

Q: IIS で認証されたユーザーになりすまして、ファイル操作を行うことはできますか?

A: IIS 認証ユーザーの権限に依存します。アカウントがファイルを操作する権限 (Windows では NTFS 権限) を持っている場合、答えは「はい」です。

ここでもっと読む:

  1. IIS 認証
  2. ASP.NET 認証
于 2012-11-20T04:22:21.863 に答える
2

ここで説明されている「ダブル ホップ」の問題に遭遇したと思います。基本的に、クライアントと IIS の間の接続は 1 ホップであり、IIS とネットワーク共有の間の接続は 2 番目のホップであり、偽装ではデフォルトでダブル ホップは許可されていません。つまり、最初の例では、ユーザーは IIS マシンのローカル リソースにはアクセスできるが、リモート リソースにはアクセスできないはずです。

資格情報がプログラムによって IIS に入力される場合、2 番目のホップはありません。それがあなたが探している違いです。

要件をサポートするには、偽装ではなく委任を実装する必要があります。詳細については、MSDNを参照してください。

于 2012-11-21T03:34:16.357 に答える