问题标签 [impersonation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
682 浏览

security - 某些模拟用例是否需要 LSA MSV1_0 子身份验证包?

问候,

我正在与一个供应商合作,该供应商已经实现了一些使用 Windows LSA MSV1_0 子身份验证包的代码(如果您有兴趣,可以使用 MSDN 信息:http: //msdn.microsoft.com/en-us/library/aa374786 (VS.85 ).aspx ),我试图弄清楚是否有必要。

据我所知,子身份验证例程和过滤器允许挂钩或自定义标准 LSA MSV1_0 登录事件处理。问题是我不明白为什么供应商的产品需要这些功能。

我问过他们,他们说他们用它来进行模仿。该产品确实需要进行模拟,但根据我有限的 win32 知识,他们可以使用普通的身份验证 API(LsaLogonUser、ImpersonateLoggedOnUser 等)在没有 subauthentication 包的情况下获得所需的功能。此外,我使用过许多类似的产品,它们都进行模拟,这是唯一使用子身份验证包的产品。

如果您想知道为什么我会在意,该产品的早期版本在子身份验证包 dll 中有一个错误,会导致锁定或蓝屏。这让我相当紧张,并让我质疑使用这种低级、内核敏感的接口。我想回到供应商那里说“你不可能需要一个 LSA 子身份验证包来模拟 - 把它拿出来”,但我不确定我是否了解标准 win32 身份验证的用例和可能的限制/impersonation API 足以明确提出该声明。

那么,对于那里的 win32 安全专家,如果您所做的只是模拟,是否有任何理由需要LSA MSV1_0 子身份验证包?

提前感谢您的任何想法!

0 投票
1 回答
156 浏览

impersonation - 模拟程序集

我有 2 个已编译的程序集。程序集 A 引用程序集 B。

我想更改程序集 B 中的一些代码。我想创建一个类库,在程序集 A 的眼中模拟程序集 B。我希望程序集 A 继续使用我的新类型和命名空间,就好像什么都没发生过一样。

我可以只创建具有相同名称和版本号的新程序集吗?程序集 A 会假设新程序集与旧程序集 B 一样吗?

0 投票
5 回答
23650 浏览

asp.net - 使用表单身份验证进行模拟

我有一个 ASP.NET 站点,它必须使用表单身份验证而不是 Windows 身份验证来访问ActiveDirectoryMembershipProvider. 该站点必须使用表单,因为它们需要设计的输入表单,而不是 Windows 身份验证使用的浏览器身份验证弹出窗口。

该站点需要模拟通过 Active Directory 登录的用户来访问用户特定的文件。

但是,WindowsIdentity.GetCurrent()尽管HttpContext.Current.User.Identity我的 web.config 包含:

我不能使用LoginUser()and ,WindowsIdentity.Impersonate()因为我需要冒充 AD 用户来获得他们的特定权限,而且我不知道用户的密码,因为 Forms 负责登录。

是否有可能从 login.aspx.cs 获取System.Web.UI.WebControls.Login.Password,然后将LoginUser()令牌保存在会话变量中以WindowsIdentity.Impersonate()备后用?或者也许是一种更安全的以正确方式模拟的方法?

我很困惑为什么表单身份验证不能自动<identity impersonate="true" />

我读过这个http://msdn.microsoft.com/en-us/library/ms998351.aspx但它使用 Windows 身份验证。

0 投票
1 回答
5792 浏览

wcf - 如何模拟 wcf 调用的客户端

我需要一些关于 WCF 和授权的帮助。目前,我有一个客户端调用作为托管在 Windows 服务中的 .NET 远程处理对象,并且正在调用 WCF 服务(使用 wshttpbinding)。WCF 服务使用基于消息的安全性的 Windows 身份验证。

Windows 服务使用特殊帐户运行。一旦客户端调用到达 .NET 远程处理对象,thread.currentprincipal 就会设置为客户端提供的主体,以便使用来自客户端的凭据执行所有操作。到目前为止没问题,现在我的当前问题出现了:应该使用客户端用户凭据调用 wcf 服务。Afaik WCF 使用 WindowsIdentity.GetCurrent 为调用创建授权信息。由于 Thread.CurrentPrincipal 持有我想用于通话的身份,我认为 (hread.CurrentPrincipal.Identity as WindowsIdentity).Impersonate() 可以完成这项工作。

但现在我得到的不是 WCF 安全异常,而是这个异常: System.ComponentModel.Win32Exception: No credentials are available in the security package

调用堆栈:在 System.ServiceModel.Security.SecurityUtils.GetCredentialsHandle 的 System.IdentityModel.SspiWrapper.AcquireCredentialsHandle(字符串包,CredentialUse 意图,AuthIdentityEx& authdata)处 System.ServiceModel。 Security.SecurityUtils.GetCredentialsHandle(SecurityBindingElement sbe, ClientCredentials clientCredentials) 在 System.ServiceModel.Security.SecurityUtils.GetCredentialsHandle(SecurityBindingElement sbe, BindingContext context) 在 System.ServiceModel.Security.SecuritySessionSecurityTokenProvider.OnOpening() 在 System.ServiceModel.Security.WrapperSecurityCommunicationObject。 OnOpening() 在 System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout) 在 System.ServiceModel.Security。CommunicationObjectSecurityTokenProvider.Open(TimeSpan timeout) at System.ServiceModel.Security.SecurityUtils.OpenTokenProviderIfRequired(SecurityTokenProvider tokenProvider, TimeSpan timeout) at System.ServiceModel.Security.SecuritySessionClientSettings`1.ClientSecuritySessionChannel.OnOpen(TimeSpan timeout) at System.ServiceModel.Channels.CommunicationObject .Open(TimeSpan timeout) at System.ServiceModel.Channels.ServiceChannel.OnOpen(TimeSpan timeout) at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout) at System.ServiceModel.Channels.ServiceChannel.CallOpenOnce.System.ServiceModel.Channels .ServiceChannel.ICallOnce.Call(ServiceChannel channel, TimeSpan timeout) at System.ServiceModel.Channels.ServiceChannel.CallOnceManager.CallOnce(TimeSpan timeout, CallOnceManager cascade) 在 System.ServiceModel。System.ServiceModel.Channels.ServiceChannel.Call(字符串操作,布尔单向,ProxyOperationRuntime 操作,Object[] 输入,Object[] 输出,TimeSpan 超时)在 System.ServiceModel.Channels.ServiceChannel 的 Channels.ServiceChannel.EnsureOpened(TimeSpan 超时) .Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs) at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation) at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(消息)在 System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation) 在 System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage信息)在 System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation) 在 System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage信息)

谢谢马丁的任何帮助

编辑:我犯了一个错误,导致这个异常,因为我忘记在模拟后创建通道工厂,但现在我得到另一个异常,我不确定如何处理它:System.IO.FileLoadException:无法加载文件或程序集 'System.IdentityModel.Selectors, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' 或其依赖项之一。未提供所需的模拟级别,或者提供的模拟级别无效。(来自 HRESULT 的异常:0x80070542)

0 投票
4 回答
6421 浏览

c++ - 用于网络模拟的 LogonUser 的替代方案 (C++)

是否有任何替代 LogonUser 和模拟给定帐户以访问网络资源的方法?我正在寻找一种模拟方法,它可以让我连接到外国域中的机器(或同样的工作组机器)。

对于初始数据,我有:机器名、用户名(或域\用户名)、明文密码。

我知道有一种方法可以使用 WNetAddConnection 与 \\machinename\ipc$ 建立连接,然后大多数网络功能将在该帐户的上下文中运行,但是 win2008 添加了另一个转折点,并且某些功能仍然使用该帐户,该线程正在运行.

我也知道,有一些方法可以使用 SSPI 获取模拟令牌。有没有人尝试过这些令牌,它们是否适合访问共享、SCM、远程注册表和其他东西?是什么 WNetAddConnection 正在使用?

编辑:澄清一下,我不能使用 LogonUser 的原因是因为我需要在不受信任的域或工作组中模拟用户

EDIT2:另一个澄清:我试图实现的项目类似于 psexec,例如:

  • 程序不应修改主机或活动目录配置(例如:创建临时本地用户等)。此外,不能假设它是否在 DC 上运行
  • 不能假设远程主机上预装了哪些软件,唯一的条件是目标上启用了 Windows 文件共享
  • 已知帐户/密码在目标上工作,但目标机器可能在本地域、外部域中,根本不在域中。

EDIT3:我真的很想听到更多关于 SSPI InitializeSecurityContext / AcquireCredentialsHandle 选项的信息。有没有人一直在广泛使用这个 API?是否可以使用模拟返回的令牌,以便线程可以访问网络共享和复制文件等?有人可以发布一个工作代码片段吗?

EDIT4:感谢 Marsh Ray,问题得到了解决。如果有人想查看概念验证代码,就在这里

0 投票
2 回答
3103 浏览

c# - .Net 类来控制远程机器上的服务?

是的,我可以用谷歌搜索,但我有点懒。我需要远程控制另一台机器上的 windows 服务。ServiceController 类是否允许我这样做?有什么限制?我可以远程启动/停止/更改“运行方式”详细信息,即更改即将到期的密码吗?

我将尝试为工作中的用户提供一个 ASP.Net 网站仪表板,以控制在他们自己的帐户下在他们的本地计算机上运行的多个服务(他们都是他们计算机上的本地管理员)。这与其他功能集成在一起,因此我不打算创建一个可以在本地为它们运行的​​可分发文件。将使用 Windows 身份验证并模拟用户进行更改。我可能会遇到什么问题?

干杯

0 投票
3 回答
96354 浏览

c# - 以其他用户身份运行代码

有没有办法告诉我的代码以不同的用户身份运行?

我正在通过 PInvoke 调用 NetUserSetInfo,我需要以不同用户的身份调用它。有没有办法做到这一点?

0 投票
3 回答
12775 浏览

c# - 打开另一个用户和域下的共享文件?

我有一个 C# 控制台应用程序,它需要读取另一个域中机器上的共享文件。当应用程序尝试访问该文件时,会发生异常,因为本地用户没有访问共享资源的权限。

目前,我通过从运行中打开共享文件夹并将用户名和密码放入 Windows 身份验证对话框然后运行应用程序来手动克服此问题。

我怎样才能以编程方式做到这一点?

0 投票
1 回答
2419 浏览

c# - 事件日志、模拟和拒绝访问 Win32Exception

我正在使用专用帐户(使用 SDDL 策略)将事件日志条目写入自定义事件日志。为此,我使用 WindowsImpersonationContext 并使用 LogonUser 获取令牌:

这段代码生成事件日志条目,但我也得到了 Win32Exception:

现在,如果我在模拟行之后放置一个 Thread.Sleep(500),异常就会消失:

是什么导致了这个异常,即使有访问被拒绝异常,事件日志条目是如何被写入的?

编辑:并且在使用之前,我已经使用相关日志注册了事件源。我只包含小代码片段以保持消息简短。

0 投票
3 回答
4392 浏览

.net - 使用配置文件模拟 Windows 服务

目前要以固定用户身份运行 windowsservice,我们在 windows 服务上设置登录属性(我们在其中指定要运行的用户名和密码)。

但我愿意拥有作为固定用户运行 Windows 服务的功能,作为配置文件中提到的 Web 应用程序中的模拟。

请对此提出您的想法,这是一种可行的方法吗?