模拟用户实体连接WPF桌面

时间:2013-11-01 16:10:54

标签: entity-framework impersonation

问题:

SQ Server设置,具有一个通用Windows帐户的权限。

客户:

使用EntityFramework的WPF应用程序。

与此类似:

LogonUserEx, DuplicateTokenEx for Impersonation with an ObjectContext in C#

Impersonation failing for database connection

这些都没有明确的解决方案。在尝试了很多不同的选项并且失败后,我去了基础。

使用MSDN示例

创建了一个控制台应用程序

http://msdn.microsoft.com/en-us/library/chf6fbt4.aspx

另外,尝试了Simple Impersonation

How do you do Impersonation in .NET?

但是,我不断收到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);
            }

        }

我明白了: 底层提供程序在Open上失败。

用户'NT AUTHORITY \ ANONYMOUS LOGON'登录失败。

我希望以新用户身份连接而不是匿名。

更新

如果项目目标是.Net3.5或更低版本,则模拟有效。 它不适用于.Net 4和.Net 4.5

也许我正在接近这个问题。如果您有任何想法或建议,请分享。

由于

0 个答案:

没有答案