偽装を使用していて、問題は資格情報がタスクに流れていないことだと思います。この点をチェックしてWindows.Identity.GetCurrent().Name
、開始コードとタスク本体の両方で の値をダンプし、それが期待どおりであることを確認することで、野生のガチョウ追跡を回避する価値があります。
上記を考えると、(正式に言えば) 実行コンテキスト (または単にセキュリティ コンテキスト) がスレッド間で流れていない方法がいくつかあります。デフォルトの動作は、コンテキストがフローされることです。そのため、何かがそれに影響を与えているに違いありません。
1) 何かが設定されました - これは、タスク内のExecutionContext.SuppressFlow()
値をダンプすることで確認できます。ExecutionContext.IsFlowSuppressed()
2)<legacyImpersonationPolicy>
デフォルトでfalse
. の場合false
、WindowsIdentityは非同期ポイント間を流れます。true
そうでない場合。これは、ExecutionContext フロー設定に関係ありません。したがってtrue
、ここで問題が発生します。SecurityContext.IsWindowsIdentityFlowSuppressed()
これは、 is your taskの値をダンプすることで確認できます。これは、 を使用してスレッドごとにプログラムで設定することもできますSecurityContext.SuppressFlowWindowsIdentity()
。
最後に、完全を期すために、アンマネージ コードを使用している場合に<alwaysFlowImpersonationPolicy>
備えて、偽装された資格情報がアンマネージ シナリオでどのようにフローされるかを制御する別の設定があります。説明されているその他の設定は、マネージ コードにのみ影響します。