我们目前在我们的数据库中存储我们的Web应用程序的用户,以及他们的密码的哈希/盐。哈希是在创建用户时计算的,并设置其密码并存储在数据库的User表中。
在创建用户帐户后的某个时间,我们可能希望在我们的域中创建一个Windows帐户,并希望能够设置域用户的密码,使其与用户登录的密码相同网络应用程序。由于我们不保存密码的纯文本版本,因此我们无法在创建密码时将其发送到AD。
我考虑解决此问题的一种方法是计算用户首次设置密码时AD使用的所有不同密码哈希值,然后在创建用户时以某种方式在AD中设置记录。< / p>
似乎应该有办法实现这一点,因为MS有从AD到Azure用户同步密码的工具。
答案 0 :(得分:5)
尝试保持AD密码与数据库密码同步是一个坏主意,原因有两个:
不是使用相同的密码创建Windows帐户,而是更改Web应用程序的身份验证以使用 AD身份验证和Windows窗体身份验证。这样,他们的AD凭证(如果有的话)将取代用户名/密码提示。
答案 1 :(得分:0)
避免持有a)加密密码,你可以得到明文,b)弱哈希,如果数据库被内部/外部攻击者破坏,这两者都是坏主意。
您可以考虑采用不同的方法: *使用长而随机的未知密码为用户创建AD帐户。放一个&#39; ADPasswordLastSet = null&#39;帐户上的时间戳。 *下次用户登录您的网络应用程序时,在对其进行身份验证后,您将获得明确的密码,因此请将AD用户的密码设置为相同。别忘了更新ADPasswordLastSet标志。
因此,如果您可以同步设置密码,则无需在任何地方写密码。
要记住的一件事:密码复杂性策略 - 您希望确保用户与之交互的UI中存在的策略具有更严格的策略。