问题标签 [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.
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 服务。
为什么会发生这种情况,我该如何解决?
编辑:
答案如下,主要在评论中,但要澄清:
- 该问题与安全相关,并且由于 NETWORKSERVICE 帐户没有足够的权限来启动/停止服务
- 我创建了一个本地用户帐户,并将其添加到 PowerUsers 组(该组几乎具有管理员权限)
- 我不希望我的整个 Web 应用程序一直模拟那个用户,所以我只在我操作服务的方法中模拟。我通过使用以下资源来帮助我在代码中做到这一点:
注意:我不通过 web.config 进行模拟,而是在代码中进行。请参阅上面的 MS 知识库文章。
windows - 是否可以在 VB.NET 中复制以下凭据过程?
解决方案(有点):
事实证明,这种具有 .NET 安全性的模拟只允许应用程序级别的访问。由于 COM 对象处于系统级别,因此模拟用户仍然无法实例化它。我通过右键单击可执行文件并选择“运行方式...”来解决这个问题,程序运行良好。我发现启动具有系统访问权限的程序(假设您正在运行它的用户具有这些凭据)。现在我正在创建一个外部程序,它将使用这种方法启动这个应用程序。
感谢您的提示:D
我在虚拟机上安装了 Windows XP。它是我域的一部分,但登录用户只是本地用户。显然,如果我尝试访问网络共享,它会提示输入用户/密码:
我在虚拟机上测试的程序使用 COM 对象与来自另一个程序的数据进行交互。如果我不冒充,我会收到错误,因为我没有正确的凭据。
我对此事进行了一些研究,发现许多网站都有大量的 VB.NET 信息。我编写的代码遇到的问题是我可以访问网络资源,但我无法实例化 COM 对象。
如果我在尝试实例化之前填写并提交凭据提示(上图),它可以正常工作。这让我相信 WinXP 凭据提示一定有一些我没有做的事情。以下是我用于模拟的代码:
我也尝试向模拟方法发送不同的标志,但似乎没有任何效果。以下是我发现的不同标志:
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 位置时。
我没有想法:)
asp.net - ASP.NET 成员资格 - 哪个用户经过身份验证,哪个用户被模拟?
在试图找出 ActiveDirectory 和 ASP.NET 成员资格如何工作时,我有点困惑......我创建了一个新的 MVC 项目并删除了 AccountController / Views。我已经更改了 Web.Config 以便它使用 ActiveDirectory 并根据用户当前的 Windows 登录自动对用户进行身份验证:
网络配置
这很好用,因为我可以执行以下操作来获取这样的用户用户名:
看下面,其实让我很困惑:
1、线程标识不应该是IUSR_WORKSTATION或者ASPNET_WP用户名吗?
2. Authentication 和 Impersonation 有什么区别?
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_ 用户)
asp.net - 如何临时冒充用户打开文件?
我想临时模拟一个域用户帐户以从 ASP.NET 站点读取网络驱动器上的文件。
我宁愿不为整个站点设置模拟或在服务器上设置映射驱动器。
.net - Windows 服务将文件写入网络共享
我有一个正在运行的 Windows 服务,它将文件从监视文件夹 (IO.FileSystemWacher) 移动到网络上的 UNC 共享。
网络共享是安全的,但共享对服务用户具有完全控制权;尽管如此,我还是遇到了找不到文件路径的问题。
我打算冒充服务(当前)用户,但不确定这是否是正确的方法。
想法?
asp.net - 有没有办法将 Windows 身份验证模式与会员提供程序“链接”?
编辑:
我想我可以归结为:我想使用 windows 身份验证模式,但能够像你一样获得用户列表Membership.GetAllUsers()
。
我正在尝试开发一种在 Intranet 上使用的解决方案,因此所有用户都将通过身份验证。我想我正在寻找两全其美的解决方案。
这是要点(稍后我将进行编辑以进行澄清)
- 我想使用 Windows 身份验证模式。但随后
Membership.GetUser()
是null
。 - 我需要在我的数据中使用一致的外键来引用经过身份验证的用户。我还需要用户的电子邮件地址以进行通知;Windows 身份验证不提供此功能。
- 对 ActiveDirectory 的任何查询都需要模拟 WindowsIdentity。IT 不会为此用途提供“系统”帐户。
有没有适合我需要的示例或解决方案?
.net - 我可以构建一个允许匿名访问但基于用户 ID 模拟用户权限的 .net Web 服务吗?
我在 IBM WAS 服务器 (Windows) 上有一个 Web 应用程序。
在 WAS 应用程序中,用户可以浏览不同服务器上的文件。此功能连接到 Web 服务,以便从网络路径中检索文件列表。
Web 服务是使用 .net 构建的,并且驻留在与文件服务器位于同一域中的单独服务器上。
WAS 应用服务请求将用户 ID 作为调用的一部分发送。
有没有办法获取传递给 Web 服务的用户 ID,并根据 Windows 安全性将该用户限制为他们有权访问的文件/文件夹?
据我所知,除非 WAS 应用程序能够以登录用户的身份将请求发送到 Web 服务,否则这是不可能的。
那么,我的第二个问题是,是否可以将 Windows 用户凭据从 WAS 应用程序传递到 Web 服务?
我对 Windows 身份验证和模拟不太熟悉,而且我对 WAS 以及它如何处理安全性的了解更少,所以我希望找出这是否可行以及我可以从哪里开始。
asp.net - 在 vb.net 中模拟活动目录用户
我从未对活动目录进行过编程,但我想做以下事情:
在 asp.net 站点上,使用有效的活动目录用户名和密码登录。如果登录有效,则重定向到页面以执行某些操作。
在相关任务中,但不是第 1 部分的一部分,解锁帐户或更改活动目录帐户的密码。
谢谢!