Mar*_*rke 8 c# impersonation wcf windows-security
我在使用WCF服务和模拟方面遇到了一些问题,我已将其提炼为下面的简单方法.WCF服务目前在exe中自托管.异常消息是"未提供所需的模拟级别,或者提供的模拟级别无效".检查错误何时抛出,Identity ImpersonationLevel设置为委托,如我的客户端上指定的,并通过Kerberos进行身份验证.
我有点困惑,因为在我看来,已经满足了ImpersonationLevel和Authenticaiton的要求.我的想法是问题可能与域设置有关,我已经设置并认为设置正确.所以我有两个问题:
代码如下:
[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;
}
}
Run Code Online (Sandbox Code Playgroud)
例外细节:
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()
Run Code Online (Sandbox Code Playgroud)
Test.bat文件内容
echo%username%
只要您使用的是.NET Process类,它就会有缺陷,它始终以父进程的标识开头.要在另一个身份下运行它,看起来你必须使用win32 api CreateProcessAsUser(我还没有工作).
我需要升级它(即Visual Studio作为管理员).
| 归档时间: |
|
| 查看次数: |
17883 次 |
| 最近记录: |