问题标签 [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 回答
1101 浏览

.net - 我如何通过 .net 远程调用模拟经过 Windows 身份验证的 Web 用户?

我有一个使用 Windows 集成安全性的 Web 应用程序。我还有一个作为本地系统运行的 Windows 服务。Web 应用程序使用 .NET 远程处理通过 tcpip 通道在服务上执行方法。在 .NET 2.0 上,有没有办法将 Windows 身份传递给服务?

0 投票
1 回答
4371 浏览

wcf - WCF:NetworkCredential 和 Impersonation 之间的关系

我在集成模式下的默认应用程序池中托管在 IIS 7 中的 WCF 服务,禁用匿名访问并启用 Windows 身份验证。

我在我的接口的方法实现中添加了以下属性。

如果我在调用我的服务时不提供网络凭据,我会得到预期的行为,因为以下情况属实:

ServiceSecurityContext.Current.WindowsIdentity.Name = myDomain\myUser
ServiceSecurityContext.Current.PrimaryIdentity.Name = myDomain\myUser
Thread.CurrentPrincipal.Identity.Name = myDomain\myUser
我可以使用 SSPI 和 myDomain\myUser 身份验证连接到远程系统上的数据库.
WindowsIdentity.GetCurrent().Name = myDomain\myUser
我可以使用 Thread.CurrentPrincipal.IsInRole() 来验证用户是否处于角色中。
我可以使用 WindowsIdentity.GetCurrent().Groups 来检索用户的组列表。

但是,如果我使用以下内容提供网络凭据:

那么以上所有内容都是相同的,除了数据库连接和列出的两个组不同。正在使用 NT Authority\Anonymous 登录用户连接到数据库。使用 NetworkCredentials 将用户置于 NT Authority\Network 组而不是 NT Authority\Interactive 中,此外还删除了 LOCAL 组。

我的目标是使用 NetworkCredential 传递的凭据建立与数据库的连接,任何建议都将不胜感激。

肖恩持有人

0 投票
2 回答
9440 浏览

vb.net - 具有不同凭据的 VB.Net File.Copy/File.Move

理想情况下,我希望能够在本地驱动器上的可访问文件夹和我无权访问(但应用程序会)的网络共享之间复制/移动。

我正在使用模拟来访问网络共享中的文件,但使用 System.IO File.Move 或 File.Copy 会强制我对每个位置使用相同的凭据。有没有解决的办法?

0 投票
5 回答
20561 浏览

asmx - 模拟和 CredentialCache.DefaultCredentials 给 HTTP 401 Unauthorized

我有一个从 Web 客户端调用的 ASMX Web 服务(在我的本地主机上 - WinXP IIS 5.1)。我的 web 服务必须使用另一个 ASMX web 服务(在 Win 2003 服务器 IIS 6.0 上)。

当我以“硬编码”方式在我的网络服务代码中提供凭据时:

...远程 Web 服务的后续调用工作正常

现在我试图在一些初步测试中冒充自己。我对此的初步阅读告诉我这可能是一个大主题,但这是我为初学者所做的:

  1. 在我的本地主机上的 WebClient 站点的虚拟目录中未选中“匿名访问”

  2. 在我的 webclient 站点的 web.config 中,我建立了: authentication mode="Windows" 和 identity impersonate="true"

  3. 在必须调用远程服务的 web 服务的 web 方法中,我更改为:

    /li>
  4. 当使用这些 DefaultCredentials 调用远程 Web 服务时,我收到以下错误:

    System.Web.Services System.Web.Services.Protocols.SoapException:服务器无法处理请求。--->

    System.Net.WebException:请求失败,HTTP 状态为 401:未经授权。

    在 System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage 消息、WebResponse 响应、流 responseStream、布尔 asyncCall)

    在 System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(字符串方法名,对象 [] 参数)

我不确定我是否误解并试图过度简化“模拟”,或者远程 Web 服务是否以某种方式连接为仅接受带有 3 个参数(即用户名、密码、域)的凭据。

0 投票
1 回答
1271 浏览

c# - impersonation and BackgroundWorker

I have a little bit of a problem when trying to use the BackgroundWorker class with impersonation. Following the answers from Google, I got this code to impersonate

It worked really well until I used it with the BackgroundWorker class. In this case, I've added a impersonation in the the code that runs asynchronously. I have no errors, but the issue I'm having is that the impersonation does not work when it is used in the async method.

In code this looks something like this:

  • instantiate a BGWorker, and add an event handler to the DoWork event:

    /li>
  • in the above handler, a impersonation is made before running some code.

    /li>
  • the code is launched with

    /li>

As I said before, no error is thrown, only that the code acts as if I didn't run any impersonation, that is with its default credentials.

Moreover, the impersonation method returns true, so the impersonation took place at a certain level, but probably not on the current thread.

This must happen because the async code runs on another thread, so there must be something that needs to be added to the MyImpersonation class. But what? :)

0 投票
4 回答
7031 浏览

powershell - Powershell 模拟

如何在 PowerShell 中进行模拟?我可以使用advapi32.dll LogonUser,但也许有更简单的解决方案?

0 投票
1 回答
981 浏览

web-services - 模拟在工作站 A 和 B 上使用相同的凭据授权失败

案例 1. 当我从我自己的 PC 上浏览一个名为 JOHNXP 的小测试站点(例如http://localhost/WebClient)时,我的 .aspx 页面调用我的 ASMX 网络服务获取我的凭据并将它们传递给另一台机器上的另一个网络服务( SERVERTRIM)在同一域中。我可以看到我的请求导致 SERVERTRIM 机器上的安全日志条目带有我的凭据。

案例 2。我移动到同一域中的另一台 PC,并使用我在个人桌面上使用的相同凭据登录。当我浏览上面的同一个测试站点时(这次是http://johnxp/WebClient),我得到这个渗透回我的 .aspx 页面:

System.Web.Services.Protocols.SoapException:服务器无法处理请求。---> System.Net.WebException:请求失败,HTTP 状态 401:未授权

查看 SERVERTRIM 上的安全日志,我注意到案例 2 中的访问导致匿名登录,这似乎可以解释 401/未授权。

当我的 WS 在不同的服务器上调用供应商的 web 服务时,我试图让我的 web 服务使用登录的 DOMAIN 用户的凭据。

我的 ASMX 网络服务在我的桌面上运行(IIS 5.1 WinXP Pro - 机器名称是 JOHNXP)。我在涉及的每个服务器中都启用了匿名 UNCHECKED,并且在我的场景中涉及的每个 web.config 中都有这个:

供应商 Web 服务在 SERVERTRIM(Win 2003 服务器)上运行,它也是 ASMX 并使用 WSE 3.0。

Wireshark 和 Netmon 现在对于我来说看起来太强大了。我认为“远程”服务器(SERVERTRIM)上不同的结果登录是足够的“证据”。上面的所有机器都在同一个域中,但如果可能的话,我想将“远程”webservice 保留在 SERVERTRIM 上,并将我的中间 webservice 保留在同一域中的不同服务器上。这种情况是否要求我必须深入研究“委托”?当在域中的另一台机器上发起 Web 请求时,监视为什么相同的凭据会导致匿名登录的最简单工具是什么?

0 投票
2 回答
4408 浏览

windows - 如何判断我的 Web 服务在 Visual Studio 2005 中运行的帐户

我有点疯了,试图理解关于模拟和委托的文档,问题是我的网络服务在哪个帐户下运行。

我在名为 JOHNXP 的开发工作站上登录为 myDomainName\johna。从 Vstudio2005 我通过 Debug 启动我的 web 服务,然后 wsdl 页面出现在我的浏览器中。

在任务管理器中,我在 .asmx 代码中的断点处看到以下内容:

aspnet_wp.exe pid=1316 用户名=ASPNET devenv.exe pid=3304 用户名=johna

托管我的 ws.asmx 代码的虚拟目录的 IIS 目录安全选项卡未选中“启用匿名访问”并选中“集成 Windows 身份验证”。

因此,当 MSDN 人员声明“您必须配置运行服务器进程的用户帐户”时,对于上述我的小 Web 服务,他们指的是什么?

我引用自:http: //msdn.microsoft.com/en-us/library/aa302400.aspx

最终,我希望我的这个 web 服务能够模拟任何经过身份验证的域用户浏览到我的 web 服务的调用。我的 web 服务反过来在不同的服务器(但相同的域)上使用另一个 ASMX web 服务。我需要这个远程 Web 服务来使用模拟的域用户凭据(不是我在 JOHNXP 上的 Web 服务的凭据)。

所以对我来说理解这一点有点难听,我发现我不清楚我的网络服务使用的帐户。我认为它是 WinXP 上 IIS 5.1 中的 ASPNET,但不确定。

0 投票
5 回答
2844 浏览

windows - 在UAC下,为什么我不能以模拟用户的身份写文件?

在启用 UAC 的 Windows 2008 之前,我一直在模拟用户。我正在尝试将一些文件写入临时目录。但是,即使用户对目录具有写入权限,当我模拟该用户时,我也无法写入该目录(我收到拒绝访问错误)。显然,这是由于 UAC 阻止了我。

这与微软论坛上的一个帖子有关:http ://forums.iis.net/t/1149793.aspx但该论坛没有得到任何回应,除了一位微软员工反复问同样的问题并在得到信息时保持沉默他问。

我已经能够通过在写入临时文件时不模拟来解决这个问题,但我有几个问题:

  1. 为什么 UAC 在模拟时不允许写入文件?

  2. 有没有什么地方可以在模拟时放置临时文件?

  3. 有更好的解决方案吗?处理这个问题的“正确”方法是什么?

  4. 是否有关于 UAC 和模拟用户的所有限制的文档来源?

0 投票
4 回答
33669 浏览

sql-server - SQL Server“EXECUTE AS”错误

我有以下设置:

有一个 SQL Server 数据库,其中包含几个表,这些表上设置了触发器(收集历史数据)。这些触发器是 CLR 存储过程,带有EXECUTE AS 'HistoryUser'. HistoryUser用户是数据库中的简单用户,无需登录。它有足够的权限从所有表中读取并写入历史表。

当我备份数据库然后将其还原到另一台机器(在这种情况下为虚拟机,但没关系)时,触发器不再起作用。事实上,不再模拟用户。即使是这样的简单陈述

产生错误:

无法作为数据库主体执行,因为主体“HistoryUser”不存在,无法模拟此类主体,或者您没有权限。

在 MSDN中读到,如果数据库所有者是域用户,则可能会发生这种情况,但事实并非如此。即使我将其更改为其他任何内容(他们推荐的解决方案),这个问题仍然存在。

如果我创建另一个没有登录的用户,我可以用它来模拟就好了。也就是说,这很好用:

我不想重新创建所有这些触发器,那么有什么办法可以使现有的HistoryUser工作?