问题标签 [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 投票
6 回答
33376 浏览

asp.net - 如何从 ASP.NET 应用程序启动/停止 Windows 服务 - 安全问题

这是我的 Windows/.NET 安全堆栈:

  • 在 Windows Server 2003 机器上作为 LocalSystem 运行的 Windows 服务。
  • 一个 .NET 3.5 网站在同一个盒子上运行,在“默认”生产服务器 IIS 设置下(所以可能是 NETWORKSERVICE 用户?)

在我的默认 VS2008 DEV 环境中,我有一个方法,它从 ASP.NET 应用程序中调用,效果很好:

当我在生产服务器上运行它时,我从 ServiceController 收到以下错误:

来源:System.ServiceProcess -> System.ServiceProcess.ServiceController -> IntPtr GetServiceHandle(Int32) -> System.InvalidOperationException 消息:无法在计算机“.”上打开 eTimeSheetReminderService 服务。

为什么会发生这种情况,我该如何解决?

编辑:

答案如下,主要在评论中,但要澄清:

  1. 该问题与安全相关,并且由于 NETWORKSERVICE 帐户没有足够的权限来启动/停止服务
  2. 我创建了一个本地用户帐户,并将其添加到 PowerUsers 组(该组几乎具有管理员权限)
  3. 我不希望我的整个 Web 应用程序一直模拟那个用户,所以我只在我操作服务的方法中模拟。我通过使用以下资源来帮助我在代码中做到这一点:

MS KB文章this,只是为了更好地理解

注意:我不通过 web.config 进行模拟,而是在代码中进行。请参阅上面的 MS 知识库文章。

0 投票
3 回答
3451 浏览

windows - 是否可以在 VB.NET 中复制以下凭据过程?

解决方案(有点):

事实证明,这种具有 .NET 安全性的模拟只允许应用程序级别的访问。由于 COM 对象处于系统级别,因此模拟用户仍然无法实例化它。我通过右键单击可执行文件并选择“运行方式...”来解决这个问题,程序运行良好。我发现启动具有系统访问权限的程序(假设您正在运行它的用户具有这些凭据)。现在我正在创建一个外部程序,它将使用这种方法启动这个应用程序。

感谢您的提示:D


我在虚拟机上安装了 Windows XP。它是我域的一部分,但登录用户只是本地用户。显然,如果我尝试访问网络共享,它会提示输入用户/密码:

替代文字

我在虚拟机上测试的程序使用 COM 对象与来自另一个程序的数据进行交互。如果我不冒充,我会收到错误,因为我没有正确的凭据。

我对此事进行了一些研究,发现许多网站都有大量的 VB.NET 信息。我编写的代码遇到的问题是我可以访问网络资源,但我无法实例化 COM 对象。

如果我在尝试实例化之前填写并提交凭据提示(上图),它可以正常工作。这让我相信 WinXP 凭据提示一定有一些我没有做的事情。以下是我用于模拟的代码:

我也尝试向模拟方法发送不同的标志,但似乎没有任何效果。以下是我发现的不同标志:

0 投票
1 回答
2285 浏览

wpf - 在 WPF 中模拟域用户 - UnauthorizedAccess

我正在尝试在 WPF 应用程序中模拟域用户帐户,以便应用程序可以写入网络上的文件夹。域用户有足够的权限写入此位置。我正在使用在网上找到的一些代码来执行模拟。

基本上,它调用返回安全令牌的本机 LogonUser 方法,然后创建一个新的 WindowsIdentity 传递令牌,最后调用 windowsIdentity.Impersonate() 方法。执行上述逻辑时没有异常。

调用 WindowsIdentity.GetCurrent() -> 返回模拟身份。

写入 UNC 路径 -> UnauthorizedAccess 异常。

因此,我在尝试编写文件之前检查了 Thread.CurrentPrincipal 对象,它有一个 GenericPrincipal,而不是具有模拟 WindowsIdentity 的 WindowsPrincipal。

因此,在应用程序启动时,我将 AppDomain.CurrentAppDomain.SetPrincipalPolicy 设置为 PrincipalPolicy.Impersonate。

我重新启动我的应用程序...

在我调用模拟之前,我可以在 Thread.CurrentPrincipal 上看到我自己的凭据,这些凭据是我用来登录我的开发机器并正在执行我的 WPF 程序的。

我再次尝试运行模拟逻辑,再次在 WindowsIdentity.GetCurrent 上看到模拟身份,一切似乎都很好,没有例外

但是,在 Thread.GetCurrentPrincipal 上,我仍然可以看到自己的凭据,如果查看 AuthenticationType 属性,则会出现 UnauthorizedException(仅在调试器中可见,不会在应用程序中抛出!!)。我让代码运行。

同样,UnauthorizedAccess 在尝试将我的文件写入 UNC 位置时。

我尝试的最后一件事是使用 WindowsIdentity.GetCurrent() 创建一个新的 WindowsPrincipal,并在 Thread.Current 上显式设置它,但结果相同。

UnauthorizedAccess 写入 UNC 位置时。

我没有想法:)

0 投票
1 回答
974 浏览

asp.net - ASP.NET 成员资格 - 哪个用户经过身份验证,哪个用户被模拟?

在试图找出 ActiveDirectory 和 ASP.NET 成员资格如何工作时,我有点困惑......我创建了一个新的 MVC 项目并删除了 AccountController / Views。我已经更改了 Web.Config 以便它使用 ActiveDirectory 并根据用户当前的 Windows 登录自动对用户进行身份验证:

网络配置

这很好用,因为我可以执行以下操作来获取这样的用户用户名:

看下面,其实让我很困惑:

1、线程标识不应该是IUSR_WORKSTATION或者ASPNET_WP用户名吗?
2. Authentication 和 Impersonation 有什么区别?

0 投票
1 回答
2070 浏览

asp.net - ASP.NET 成员资格 - 我可以允许匿名访问并仍然使用 Active Directory 自动登录吗?

我希望这不是悖论,但我不知道该怎么做......

我有一个带有以下 Web.Config 条目的 VS2008 ASP.NET MVC 项目:

这使得访问者使用他们用于登录 Windows 的 DOMAIN\username 登录名自动登录。(对?)

这适用于我的开发服务器 ( http://localhost:xxxx ),但不适用于我的 IIS 服务器 ( http://localhost )。可能是因为开发服务器是由我的本地用户(在域上具有 ActiveDirectory 读取权限)“启动”的,并且因为 IIS 是由没有的 IUSR_WORKSTATION 用户“启动”的。(对?)

如果以上所有情况都成立,我如何模拟 IIS 用户(例如我自己的用户名)以仅使用 Windows 登录名对当前用户进行身份验证?(像下面的例子)?

还是应该授予 IUSR_WORKSTATION 用户 ActiveDirectory?读取权限(不是首选,因为我会经常切换服务器/IUSR_ 用户)

0 投票
2 回答
6075 浏览

asp.net - 如何临时冒充用户打开文件?

我想临时模拟一个域用户帐户以从 ASP.NET 站点读取网络驱动器上的文件。

我宁愿不为整个站点设置模拟或在服务器上设置映射驱动器。

0 投票
5 回答
5339 浏览

.net - Windows 服务将文件写入网络共享

我有一个正在运行的 Windows 服务,它将文件从监视文件夹 (IO.FileSystemWacher) 移动到网络上的 UNC 共享。

网络共享是安全的,但共享对服务用户具有完全控制权;尽管如此,我还是遇到了找不到文件路径的问题。

我打算冒充服务(当前)用户,但不确定这是否是正确的方法。

想法?

0 投票
1 回答
503 浏览

asp.net - 有没有办法将 Windows 身份验证模式与会员提供程序“链接”?

编辑:

我想我可以归结为:我想使用 windows 身份验证模式,但能够像你一样获得用户列表Membership.GetAllUsers()


我正在尝试开发一种在 Intranet 上使用的解决方案,因此所有用户都将通过身份验证。我想我正在寻找两全其美的解决方案。

这是要点(稍后我将进行编辑以进行澄清)

  • 我想使用 Windows 身份验证模式。但随后Membership.GetUser()null
  • 我需要在我的数据中使用一致的外键来引用经过身份验证的用户。我还需要用户的电子邮件地址以进行通知;Windows 身份验证不提供此功能。
  • 对 ActiveDirectory 的任何查询都需要模拟 WindowsIdentity。IT 不会为此用途提供“系统”帐户。

有没有适合我需要的示例或解决方案?

0 投票
3 回答
1104 浏览

.net - 我可以构建一个允许匿名访问但基于用户 ID 模拟用户权限的 .net Web 服务吗?

我在 IBM WAS 服务器 (Windows) 上有一个 Web 应用程序。

在 WAS 应用程序中,用户可以浏览不同服务器上的文件。此功能连接到 Web 服务,以便从网络路径中检索文件列表。

Web 服务是使用 .net 构建的,并且驻留在与文件服务器位于同一域中的单独服务器上。

WAS 应用服务请求将用户 ID 作为调用的一部分发送。

有没有办法获取传递给 Web 服务的用户 ID,并根据 Windows 安全性将该用户限制为他们有权访问的文件/文件夹?

据我所知,除非 WAS 应用程序能够以登录用户的身份将请求发送到 Web 服务,否则这是不可能的。

那么,我的第二个问题是,是否可以将 Windows 用户凭据从 WAS 应用程序传递到 Web 服务?

我对 Windows 身份验证和模拟不太熟悉,而且我对 WAS 以及它如何处理安全性的了解更少,所以我希望找出这是否可行以及我可以从哪里开始。

0 投票
2 回答
1885 浏览

asp.net - 在 vb.net 中模拟活动目录用户

我从未对活动目录进行过编程,但我想做以下事情:

  1. 在 asp.net 站点上,使用有效的活动目录用户名和密码登录。如果登录有效,则重定向到页面以执行某些操作。

  2. 在相关任务中,但不是第 1 部分的一部分,解锁帐户或更改活动目录帐户的密码。

谢谢!