WCFサービスと偽装に問題があります。これを以下の簡単な方法にまとめました。WCFサービスは、現在exeで自己ホストされています。例外メッセージは、「必要な偽装レベルが提供されなかったか、提供された偽装レベルが無効です」です。エラーがスローされるタイミングを確認すると、Identity ImpersonationLevelは、クライアントで指定されているように委任に設定され、Kerberosを介して認証されます。
ImpersonationLevelとAuthenticaitonの要件が満たされているように見えるので、少し戸惑っています。私の考えでは、問題はおそらく私が設定したドメイン設定に関係していて、正しく設定されていると思います。だから私は2つの質問があります:
- 以下の操作は成功するはずですか?(またはそれは欠陥がありますか?)
- Win2k8ドメインを機能させるには、どのような設定を構成する必要がありますか?私は同じWin2k8ドメインのメンバーである2つのボックスで作業しています(偽装をテストする目的で、新しいドメインとかなりバニラです)。
次のようにコーディングします。
[OperationBehavior(Impersonation = ImpersonationOption.Required)]
public string Test()
{
WindowsIdentity identity = ServiceSecurityContext.Current.WindowsIdentity;
using (identity.Impersonate())
{
ProcessStartInfo pi = new ProcessStartInfo(@"c:\temp\test.bat");
pi.UseShellExecute = false;
pi.RedirectStandardOutput = true;
Process p = Process.Start(pi); // exception thrown here!
p.WaitForExit();
string o = p.StandardOutput.ReadToEnd();
return o;
}
}
例外の詳細:
Win32Exception occurred: Either a required impersonation level was not provided, or the provided impersonation level is invalid
at System.Diagnostics.Process.CreatePipeWithSecurityAttributes(SafeFileHandle& hReadPipe, SafeFileHandle& hWritePipe, SECURITY_ATTRIBUTES lpPipeAttributes, Int32 nSize)
at System.Diagnostics.Process.CreatePipe(SafeFileHandle& parentHandle, SafeFileHandle& childHandle, Boolean parentInputs)
at System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo)
at System.Diagnostics.Process.Start()
at System.Diagnostics.Process.Start(ProcessStartInfo startInfo)
at MonetEnterprise.Service.SecurityService.Test()
Test.batファイルの内容
エコー%username%