隐藏模拟密码

Posted

技术标签:

【中文标题】隐藏模拟密码【英文标题】:Hiding passwords for impersonation 【发布时间】:2012-05-26 18:34:05 【问题描述】:

以下网页讨论了在代码中使用模拟 (ASP.NET):http://support.microsoft.com/kb/306158。我正在考虑为代码创建一个类,然后应用程序可以调用 impersonateValidUser 和 undoimpersonation。

我担心将用户名和密码放入我的代码中,因为任何人都可以使用 ILDASM 之类的工具看到它们。隐藏这些密码的最佳方法是什么?

文章有一个标题为:模拟 IIS Authenticated 帐户或用户。我想过在 Web.Config 中创建一个模拟用户,但这意味着整个应用程序都作为模拟用户运行。我只希望应用程序的一小部分以模拟用户身份运行 - 当需要访问和更新活动目录时。

【问题讨论】:

【参考方案1】:

我真的很喜欢您的意图,即只让应用程序中执行 AD 更新的部分在高特权帐户下运行。我还分享了您对将密码存储在 web.config 或代码中的担忧。

我可以为你想出两个选择。

    将帐户详细信息存储在 web.config 和 encrypt web.config 的该部分中。这将确保只有 Web 服务器的管理员才能获得密码。获取 web.config 的其他人将无法理解密码。

    使用 AD 更新代码创建一个小的独立 WCF 服务。然后在单独的应用程序池中运行该 WCF 服务,并将应用程序池设置为有权访问活动目录的用户的身份。为 WCF 设置一个受限的、仅限本地主机的终结点。 WCF 服务应具有访问控制,仅允许来自专用帐户的访问。该帐户应设置为主网站的应用程序池的标识。

选项 1 更容易实现并且可以很好地保护密码。选项 2 为密码提供了更好的保护,因为它们根本不存储在 web.config 中 - 它们是 IIS 配置的一部分。选项 2 还增加了特权代码与系统其余部分之间的完全隔离,因为它在单独的进程中运行 AD 更新代码。有了这种隔离,就更容易对 AD 代码进行代码审查以检查安全问题。

【讨论】:

谢谢。 ASP.NET 应用程序作为匿名用户运行。当前有一个 WCF Web 服务正在使用 Windows 身份验证运行。我想我可以创建第二个 WCF Web 服务,以具有管理员权限的用户身份运行。您是否认为拥有两个 Web 服务是不好的做法 - 一个用于管理员用户,另一个用于当前登录的用户? 根据我的建议,您应该将 ASP.NET 应用程序池更改为以专用用户身份运行 - 站点的身份验证模式仍然是匿名的。我看不出两个 WCF 服务有什么缺点。 我明白了。该应用程序目前作为网络服务运行,我希望保留它。最好有一个 Web 服务,但它需要两个权限。另一个选项(选项 3)是有一个计划任务,每晚作为批处理运行,并授予计划任务管理员权限。与您的两个选项相比,您如何看待选项三? 如果您的要求可以通过每晚批处理来满足,那很好,但您将失去向用户报告错误的可能性。我从不使用批次,除非这是唯一的可能性。 我同意。还有一个问题。您是否认为拥有多个未组合的 Web 服务是不好的做法?只是因为它们在不同的用户上下文中运行,即作为用户登录而另一个作为管理员用户?

以上是关于隐藏模拟密码的主要内容,如果未能解决你的问题,请参考以下文章

python3-password在输入密码时隐藏密码

隐藏 UITextField 密码

在 GET 中隐藏密码字段,但在 Django REST Framework 中隐藏密码字段,其中序列化程序中的 depth=1

微信小程序密码表单,显示与隐藏密码

spring security ldap隐藏密码属性

IOS swift实现密码的显示与隐藏