无论是需要模拟级别未提供,或提供的模拟级别无效(Either a required imperson

2019-09-22 03:18发布

我有一个WCF服务,并模拟了一些问题,我已经蒸这下面的简单方法。 WCF服务目前在自己一个exe主办。 是“要么未提供所需的模拟电平,或所提供的模拟级别无效”的异常消息。 检查时抛出的错误,身份ImpersonationLevel设置为代表团,我的客户端上的规定,并通过Kerberos身份验证它。

我有点疑惑,因为在我看来,ImpersonationLevel和Authenticaiton的要求已得到满足。 我的想法是,该问题可能与域设置,我给自己定,并认为是否设置正确的事情。 所以,我有两个问题:

  1. 如果下面的操作成功? (或者是有缺陷的?)
  2. 有什么需要设置要在Win2k8域配置,使其工作? 我工作的两个箱子是相同Win2k8域的成员(它的一个新的领域和漂亮的香草,以测试模拟的意图)。

代码如下:

[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文件内容

回声%的用户名%

Answer 1:

  1. 只要你使用.NET Process类是有缺陷的,它总是与父进程的标识开始。 要以另一个身份,它看起来像你必须使用Win32 API的CreateProcessAsUser(我已经没有了还工作)运行它。

  2. 我需要运行它升高(即Visual Studio中的管理员)。



文章来源: Either a required impersonation level was not provided, or the provided impersonation level is invalid