問題タブ [impersonation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
6 に答える
33376 参照

asp.net - ASP.NET アプリから Windows サービスを開始/停止する方法 - セキュリティの問題

これが私の Windows/.NET セキュリティ スタックです。

  • Windows Server 2003 ボックスで LocalSystem として実行されている Windows サービス。
  • 「デフォルト」の実動サーバーIIS設定の下で、同じボックスで実行されている.NET 3.5 Webサイト(おそらくNETWORKSERVICEユーザーとして?)

デフォルトの VS2008 DEV 環境では、ASP.NET アプリから呼び出される次の 1 つのメソッドがあり、正常に動作します。

これを本番サーバーで実行すると、ServiceController から次のエラーが発生します。

ソース: System.ServiceProcess -> System.ServiceProcess.ServiceController -> IntPtr GetServiceHandle(Int32) -> System.InvalidOperationException メッセージ: コンピューター '.' で eTimeSheetReminderService サービスを開けません。

なぜこれが起こっているのですか?どうすれば修正できますか?

編集:

答えは以下にあり、主にコメントにありますが、明確にするために:

  1. この問題はセキュリティ関連であり、NETWORKSERVICE アカウントにサービスを開始/停止するための十分な権限がないために発生しました。
  2. ローカル ユーザー アカウントを作成し、それを PowerUsers グループに追加しました (このグループにはほぼ管理者権限があります)。
  3. Web アプリ全体が常にそのユーザーを偽装することは望ましくないため、サービスを操作するメソッドでのみ偽装します。これは、次のリソースを使用してコードで行うのに役立ちます。

理解を深めるために、MS KB の記事とこれ

注: web.config を介して偽装するのではなく、コードで実行します。上記の MS KB 記事を参照してください。

0 投票する
3 に答える
3451 参照

windows - 次の認証プロセスを VB.NET で複製することはできますか?

解決策(ちょっと):

.NET のセキュリティを使用したこのなりすましでは、アプリケーション レベルのアクセスしか許可されないことが判明しました。COM オブジェクトはシステム レベルにあるため、偽装されたユーザーはそれをインスタンス化できません。実行可能ファイルを右クリックして「Run As...」を選択すると、プログラムは正常に機能しました。システムアクセスでプログラムを起動することがわかりました(実行しているユーザーがそれらの資格情報を持っていると仮定します)。現在、このメソッドを使用してこのアプリケーションを起動する外部プログラムを作成中です。

ヒントをありがとう:D


仮想マシンに Windows XP をインストールしています。これは私のドメインの一部ですが、ログインしているユーザーはローカル ユーザーのみです。明らかに、ネットワーク共有にアクセスしようとすると、ユーザー/パスワードの入力を求めるプロンプトが表示されます。

代替テキスト

仮想マシンでテストしているプログラムは、COM オブジェクトを使用して、別のプログラムからのデータとやり取りします。偽装しないと、適切な資格情報を持っていないため、エラーが発生します。

この問題について調査を行ったところ、VB.NET に関する適切な情報が掲載されている Web サイトがいくつか見つかりました。私が書いたコードの問題は、ネットワーク リソースにアクセスできるが、COM オブジェクトをインスタンス化できないことです。

インスタンス化を試みる前に資格情報プロンプト (上記) を入力して送信すると、正常に機能します。そのため、WinXP 資格情報プロンプトが行っていることで、私が行っていないことがあるに違いないと私は信じています。以下は、偽装に使用しているコードです。

また、偽装メソッドにさまざまなフラグを送信しようとしましたが、何も機能していないようです。私が見つけたさまざまなフラグは次のとおりです。

0 投票する
1 に答える
2285 参照

wpf - WPF でのドメイン ユーザーの偽装 - UnauthorizedAccess

アプリケーションがネットワーク上のフォルダーに書き込めるように、WPF アプリケーションでドメイン ユーザー アカウントを偽装しようとしています。ドメイン ユーザーには、この場所に書き込むための十分な権限があります。なりすましを実行するために、ネット上で見つかったコードを使用しています。

基本的には、セキュリティ トークンを返すネイティブの LogonUser メソッドを呼び出し、トークンを渡して新しい WindowsIdentity を作成し、最後に windowsIdentity.Impersonate() メソッドを呼び出します。上記のロジックを実行しても例外は発生しません。

WindowsIdentity.GetCurrent() -> を呼び出すと、偽装された ID が返されます。

UNC パスへの書き込み -> UnauthorizedAccess 例外。

そのため、ファイルを書き込もうとする前に Thread.CurrentPrincipal オブジェクトを調べます。これには GenericPrincipal があり、偽装された WindowsIdentity を持つ WindowsPrincipal はありません。

そのため、アプリケーションの起動時に、AppDomain.CurrentAppDomain.SetPrincipalPolicy を PrincipalPolicy.Impersonate に設定しました。

アプリケーションを再起動します...

なりすましを呼び出す前に、開発マシンへのログオンに使用し、WPF プログラムを実行している Thread.CurrentPrincipal で自分の資格情報を確認できます。

再度偽装ロジックを実行しようとすると、WindowsIdentity.GetCurrent に偽装された ID が表示されます。すべて問題なく、例外はありません。

ただし、Thread.GetCurrentPrincipal では自分の資格情報がまだ表示されます。AuthenticationType プロパティを見ると、UnauthorizedException があります (これはデバッガーでのみ表示され、アプリケーションではスローされません!!)。コードを実行させました。

ここでも、UNC の場所にファイルを書き込もうとすると UnauthorizedAccess が発生します。

最後に試したのは、WindowsIdentity.GetCurrent() を使用して新しい WindowsPrincipal を作成し、それを Thread.Current に明示的に設定することですが、結果は同じです。

UNC ロケーションへの書き込み時の UnauthorizedAccess。

私はアイデアがありません:)

0 投票する
1 に答える
974 参照

asp.net - ASP.NET メンバーシップ - どのユーザーが認証され、どのユーザーが偽装されているか?

ActiveDirectory と ASP.NET メンバーシップがどのように機能するかを調べようとしているときに少し混乱しています... 新しい MVC プロジェクトを作成し、AccountController / Views を削除しました。ActiveDirectory を使用し、現在の Windows ログインに基づいてユーザーを自動的に認証するように Web.Config を変更しました。

Web.Config

次のようにしてユーザーのユーザー名を取得できるため、これはうまく機能します。

以下を見ると、実際には混乱します。

1. スレッド ID は IUSR_WORKSTATION または ASPNET_WP ユーザー名であるべきではありませんか?
2. 認証と偽装の違いは何ですか?

0 投票する
1 に答える
2070 参照

asp.net - ASP.NET メンバーシップ - 匿名アクセスを許可し、Active Directory を使用した自動ログインを引き続き使用できますか?

これが逆説的でないことを願っていますが、これをどのように行うべきかわかりません...

次の Web.Config エントリを持つ VS2008 ASP.NET MVC プロジェクトがあります。

これにより、訪問者は、Windows へのログオンに使用した DOMAIN\username ログインで自動的にログオンします。(右?)

これは開発サーバー ( http://localhost:xxxx ) では機能しますが、IIS サーバー ( http://localhost ) では機能しません。おそらく、開発サーバーがローカル ユーザー (ドメインで ActiveDirectory 読み取り権限を持つ) によって「開始」され、IIS が IUSR_WORKSTATION ユーザーによって「開始」されたためです。(右?)

上記のすべてが当てはまる場合、IIS ユーザーを偽装して (たとえば、自分のユーザー名に)、現在のユーザーを Windows ログイン名だけで認証するにはどうすればよいですか? (下の例のように)?

それとも、IUSR_WORKSTATION ユーザーに ActiveDirectory を付与する必要がありますか? 読み取り権 (サーバー/ IUSR_ ユーザーを頻繁に切り替えるため、好ましくありません)

0 投票する
2 に答える
6075 参照

asp.net - 一時的にユーザーになりすましてファイルを開くにはどうすればよいですか?

ASP.NET サイトからネットワーク ドライブ上のファイルを読み取るために、ドメイン ユーザー アカウントを一時的に偽装したいと考えています。

サイト全体に偽装を設定したり、サーバーにマップされたドライブを設定したりしたくありません。

0 投票する
5 に答える
5339 参照

.net - ネットワーク共有にファイルを書き込むWindowsサービス

監視対象フォルダー(IO.FileSystemWacher)からネットワーク上のUNC共有にファイルを移動するWindowsサービスを実行しています。

ネットワーク共有は保護されていますが、共有はサービスユーザーを完全に制御できます。それにもかかわらず、ファイルパスが見つからないという問題が発生します。

私はサービス(現在の)ユーザーになりすますつもりですが、これがこれを行う正しい方法であるかどうかはわかりません。

アイデア?

0 投票する
3 に答える
1104 参照

.net - 匿名アクセスを許可するが、ユーザー ID に基づいてユーザー権限を偽装する .net Web サービスを構築できますか?

IBM WAS サーバー (Windows) 上に Web アプリケーションがあります。

WAS アプリでは、ユーザーは別のサーバー上のファイルを参照できます。この機能は、ネットワーク パスからファイルのリストを取得するために Web サービスに接続します。

Web サービスは .net で構築され、ファイル サーバーと同じドメインにある別のサーバーに存在します。

WAS アプリ サービス要求は、ユーザーの ID を呼び出しの一部として送信します。

Web サービスに渡されるユーザーの ID を取得し、そのユーザーを Windows セキュリティに基づいてアクセスできるファイル/フォルダーのみに制限する方法はありますか?

私が知っていることから、WAS アプリがログイン ユーザーとして Web サービスに要求を送信できない限り、これは不可能です。

2 つ目の質問は、WAS アプリケーションから Web サービスに Windows ユーザー資格情報を渡すことは可能ですか?

私は Windows 認証と偽装にあまり詳しくなく、WAS とそれがセキュリティを処理する方法についてもあまり知らないので、これが可能かどうか、どこから始めればよいかを知りたいと思っています。

0 投票する
2 に答える
1885 参照

asp.net - vb.net での Active Directory ユーザーの偽装

Active Directory をプログラミングしたことはありませんが、次のことを行いたいと考えています。

  1. asp.net サイトで、有効なアクティブ ディレクトリのユーザー名とパスワードを使用してログインします。ログインが有効な場合は、ページにリダイレクトしていくつかのアクションを実行します。

  2. パート 1 ではなく、関連するタスクで、アカウントのロックを解除するか、Active Directory アカウントのパスワードを変更します。

ありがとう!