ValidateCredentials()-安全问题

时间:2018-06-27 22:03:11

标签: c# .net active-directory

我希望所有的.NET开发人员可以帮助我解决这一难题。我目前在公司管理一个ASP.NET Intranet网站。为了使用Active Directory对我们的用户进行身份验证,我们具有类似于以下内容的代码:

using(PrincipalContext pc = new PrincipalContext(ContextType.Domain, string name, string user, string password) {

  bool credsOK = pc.ValidateCredentials(string user, string password);

  //Check if the creds come back valid
  if(credsOK) {

      //Do Stuff
  }
}

我担心的是,有权访问代码的人可能会在调用ValidateCredentials之后在if语句中设置断点,在password变量上添加一个监视,从而能够以纯文本格式查看用户的密码,对我来说是危险和不安全的,尤其是在领域环境中。

有几个问题:

1)为什么ValidateCredentials将凭据作为纯字符串而不是更安全的数据类型?

2)我可以使用哪些最佳实践,而不使用ValidateCredentials()来根据用户的凭据对用户进行身份验证?

非常感谢您能提供的帮助。

谢谢

-rk15000

1 个答案:

答案 0 :(得分:0)

我对此进行思考,如果有人可以访问源代码并放置用于收集密码的断点,则可能需要担心更大的问题。毕竟,他们需要能够将远程调试器连接到您的生产服务器。

不过要回答您的问题。您可能需要走上单独的登录服务之路,这可能会使用某些SSO工具(例如ADFS)将身份验证与您的应用程序隔离。但是,根据您给出的示例,目前尚不清楚将产生多少影响