问题 :
具有一个通用 Windows 帐户权限的 SQ 服务器设置。
客户 :
使用 EntityFramework 的 WPF 应用程序。
类似于这些:
LogonUserEx,DuplicateTokenEx 用于在 C# 中使用 ObjectContext 进行模拟
这些都没有明确的解决方案。在尝试了很多不同的选项并失败后,我开始学习基础知识。
使用 MSDN 示例创建了一个控制台应用程序
http://msdn.microsoft.com/en-us/library/chf6fbt4.aspx
另外,尝试了简单的模仿
但是,我不断收到 System.StackOverflowException 是未处理的异常 {无法评估表达式,因为当前线程处于堆栈溢出状态。}
在这一行之后:
bool returnValue = LogonUser(userName, domainName, Console.ReadLine(),
LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT,
out safeTokenHandle);
Console.WriteLine("LogonUser called.");
当我尝试使用 LOGON_TYPE
using (SimpleImpersonation.Impersonation.LogonUser("domain", "user", "password", SimpleImpersonation.LogonType.Network))
{
Console.WriteLine(WindowsIdentity.GetCurrent().Name);
}
LogonType.Network 是唯一一个不给出异常的。它会显示新的用户名。
但是,当我尝试:
using (SimpleImpersonation.Impersonation.LogonUser("domain", "user", "password", SimpleImpersonation.LogonType.Network))
{
Console.WriteLine(WindowsIdentity.GetCurrent().Name); // works as expected , correct user name
try
{
model.MyEntities te = new MyEntities();
model.PMGroup p = te.PMGroups.Where(g => g.ID == 1).FirstOrDefault();
}
catch (Exception e)
{
Console.WriteLine(e.Message + Environment.NewLine + e.InnerException.Message);
}
}
我明白了:底层提供程序在打开时失败。
用户“NT AUTHORITY\ANONYMOUS LOGON”登录失败。
我会以新用户的身份连接而不是匿名。
更新:
如果项目目标是 .Net3.5 或更低版本,则模拟有效。它不适用于 .Net 4 和 .Net 4.5
也许我在处理这个问题时都错了。如果您有任何想法或建议,请分享。
谢谢