LogonUserEx、DuplicateTokenEx 用于在 C# 中使用 ObjectContext 进行模拟

2024-02-01

我们有一个特定的 SQL Server,我们需要从厚客户端(.Net 4.0 WPF)访问它,并且我们用于该连接的唯一凭据是“服务”帐户,该帐户实际上是具有 SQL 权限的 Active Directory 帐户服务器。

我在整个项目中使用实体框架和 ObjectContext,所以我在这里继续使用它。环顾四周后,我实现了一个基于 LogonUserEx 和 DuplicateTokenEx 的模拟例程,它允许我通过依赖注入编写以下内容:

using (container.Resolve<Impersonate>())
using (var context = container.Resolve<MyObjectContext>())
{
   context.Connection.Open();
   //Do some work with the data as the service account.
   context.Connection.Close();
}

上面Impersonate类的构造函数调用了LogonUserEx等等。我明确打开和关闭连接作为工作单元模式的一部分,这不应该是相关的。

现在,通过调试我发现服务帐户的令牌已成功检索,并且用户被“模拟”。但是,当我尝试实例化 ObjectContext 时,我收到以下错误:

System.TypeInitializationException: The type initializer for 'EntityBid' threw a
n exception. ---> System.IO.FileLoadException: Could not load file or assembly '
System.Data.Entity.dll' or one of its dependencies. Either a required impersonat
ion level was not provided, or the provided impersonation level is invalid. (Exc
eption from HRESULT: 0x80070542)
   at System.Runtime.InteropServices.Marshal.GetHINSTANCE(RuntimeModule m)
   at System.Runtime.InteropServices.Marshal.GetHINSTANCE(Module m)
   at EntityBid.initEntryPoint()
   at EntityBid.internalInitialize()
   at EntityBid..cctor()
   --- End of inner exception stack trace ---
   at EntityBid.Trace(String fmtPrintfW, String a1)
   at System.Data.EntityUtil.ProviderExceptionWithMessage(String message, Except
ion inner)
   at System.Data.EntityClient.EntityConnection.OpenStoreConnectionIf(Boolean op
enCondition, DbConnection storeConnectionToOpen, DbConnection originalConnection
, String exceptionCode, String attemptedOperation, Boolean& closeStoreConnection
OnFailure)
   at System.Data.EntityClient.EntityConnection.Open()
   at Core.Security.TestHarness._2.Class1..ctor()

因此,我所模拟的帐户似乎不再具有从 GAC 加载 DLL 的访问权限或足够的权限。 Fusion 日志没有提供任何附加信息。

我不知道如何解决这个问题。我想知道我当前是否没有检索到具有足够权限的令牌。请注意,我向 LogonUserEx 提供以下参数:LOGON32_LOGON_NETWORK_CLEARTEXT 和 LOGON32_PROVIDER_DEFAULT。

最后,请注意,此过程在具有登录用户管理权限的计算机上绝对可以正常工作。当我在具有“普通”帐户的用户上运行它时,它会崩溃,并受通常的公司 GPO 的约束!

编辑:只是为了包含模拟的“重要”部分。请注意,我现在已切换到 LOGON32_LOGON_UNLOCK,因为它工作得更好。对于格式稍有问题的情况深表歉意:

if (LogonUserEx(dUser, dDomain, dPassword, LOGON32_LOGON_UNLOCK,
                                  LOGON32_PROVIDER_DEFAULT, out token, IntPtr.Zero,    IntPtr.Zero, IntPtr.Zero, IntPtr.Zero))
{

                        if (DuplicateTokenEx(token, MAXIMUM_ALLOWED, ref sa, SECURITY_IMPERSONATION_LEVEL.SecurityDelegation, TOKEN_TYPE.TokenPrimary, out tokenDuplicate))
                        {
                            m_ImpersonatedUser = new WindowsIdentity(token);

                            _windowsImpersonationContext = m_ImpersonatedUser.Impersonate();

非常感谢任何帮助。

Nick.


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LogonUserEx、DuplicateTokenEx 用于在 C# 中使用 ObjectContext 进行模拟 的相关文章

随机推荐

  • 从 Spring WS 拦截器获取请求参数

    我将 Jaxb 2 与 Spring WS 一起使用 并且我有一个针对特定有效负载的拦截器 并且它工作正常 这里我的要求是从拦截器的handleRequest方法中读取请求参数 我知道这应该是相当简单的 但是无法找到读取请求参数的方法 目前
  • fstream 文件结尾问题

    我正在读取多个文件 这些文件大约有 300 个 由于某种原因 如果我将循环设置为运行超过 3 次迭代 则应该迭代每一行的 while 循环将变得无限 我的问题是 我是否忘记在 while 循环中包含一些内容 现在我只是尝试一次读取一行 最终
  • Android + 字符串

    谁能告诉我 Android 中的 toString 是什么以及如何使用它 作为例子将受到高度赞赏 toString http download llnw oracle com javase 6 docs api java lang Obje
  • SQL 中的特殊字符转义

    Oracle 有没有一种简单的方法来转义 SQL 语句中的特殊字符 即 我看到了这个link http orafaq com faq how does one escape special characters when writing s
  • php://输入返回空

    我有骨干应用程序 当模型更新时 PUT 请求会发送到我的服务器 客户端看起来不错 但在服务器端 PHP 我遇到了一些麻烦 当我第一次在 PHPStorm 中测试这个请求时 file get contents php input 返回我所期望
  • 使用 jQuery 确定相对路径

    我在顶级域下的子文件夹中安装了几个 WordPress 站点 http www mydomain com site a http www mydomain com site a http www mydomain com site b ht
  • 节点 - 将 jest 与 esm 包一起使用

    我想知道如何合并esm包裹https www npmjs com package esm https www npmjs com package esm在节点后端使用笑话 我尝试设置一个安装文件require esm and require
  • 谷歌分析 4 与 React

    我一直在尝试在我的应用程序中将 React ga 包与 google Analytics 4 一起使用 测量 ID 不适用于它 并且我可以使用的 google Analytics 4 中没有跟踪代码 拜托 我需要帮助 import Reac
  • jquery根据背景图像名称选择元素

    我正在尝试选择一个具有特定背景图像的 div 这是我迄今为止所拥有的 不工作 对我做错了什么有什么想法吗 我正在尝试遵循 jQuery 文档 var markerShadow0 div background image url http w
  • 在电子邮件中发送内嵌图像

    通过电子邮件将图像作为正文中的嵌入图像发送时遇到问题 图像文件显示为附件 这没问题 但内联图像部分仅显示为红色 x 这是我到目前为止所拥有的 LinkedResource inline new LinkedResource filePath
  • 如何使用 mox 模拟类属性?

    我有一堂课 class MyClass object property def myproperty self return hello Using mox http code google com p pymox and py test
  • AS3:调用静态类方法 - 类和方法名称是字符串

    我有一个丑陋的问题 我有两个字符串变量 className 和 staticMethod 存储类的名称以及我必须调用的静态方法 package import flash display Sprite import flash utils g
  • 如何显示定义的值

    在一些 doxygen 文档中 我想显示 define 而不是标签本身 例如 在一个 C 文件中我有 define REPEAT N TIMES 10 现在我想在我的文档中显示 该动作进行10次 如果我使用 ref REPEAT N TIM
  • 无符号函数必须返回一些东西吗?

    嘿 我正在做一个练习 我必须用 C 编写一个无符号函数 我有一个问题 我是否必须因为函数的类型而返回一些东西 还是可以选择的 在正常使用中 任何声明返回值的函数都应该返回一个值 这很大程度上是一个良好的编程实践的问题 未能返回值通常是错误的
  • 从 Java 类生成 JSON 模式

    我有一个 POJO 类 public class Stock int id String name Date date 是否有任何注释或开发框架 API 可以将 POJO 转换为 JSON 模式 如下所示 id type int name
  • 如何获取 Qt 应用程序的当前工作目录路径?

    我正在使用 Qt 库用 C 编写程序 我想获取我的程序的当前工作目录 我找到了QDir 当前路径 and QCoreApplication applicationDirPath 函数 但它们返回应用程序可执行文件所在的目录 我不想获取包含应
  • 选择许多三层深度

    我可以使用 SelectMany 展平集合中子集合的结果 a list of Foos a Foo contains a List of Bars var source new List
  • 使用 lm 对独特因子组合的子集进行回归

    我想对由分组变量的独特组合定义的子集自动执行简单的多元回归 我有一个数据框 其中包含多个分组变量 df1 1 6 和一些自变量 df1 8 10 以及响应 df1 7 这是数据的摘录 structure list Surface struc
  • HttpsServer 使用curl 导致CPU 负载100%

    我已经围绕 Java 创建了一个最小的应用程序HttpsServer https docs oracle com en java javase 11 docs api jdk httpserver com sun net httpserve
  • LogonUserEx、DuplicateTokenEx 用于在 C# 中使用 ObjectContext 进行模拟

    我们有一个特定的 SQL Server 我们需要从厚客户端 Net 4 0 WPF 访问它 并且我们用于该连接的唯一凭据是 服务 帐户 该帐户实际上是具有 SQL 权限的 Active Directory 帐户服务器 我在整个项目中使用实体