自定义多因素Active Directory身份validation

我会开始说,我不知道我是否真的想要做什么。 如果是这样的话,不要犹豫,告诉我,我在做梦。

我想在C#中创build一个自定义的活动目录“authenticator”。 我的意思是,我希望每当有人login时,首先检查存储在AD中的密码,然后执行第二步validation。 只有两个步骤都通过,用户才能login。

现在,我想上面提到的并不是太过分,只是想把这个authentication器集成到一个定制的产品中,对吗? 我完全是疯了,也想知道这个身份validation是否可以使用,当login到Windows本身? 或者也许是预先存在的产品,对AD进行authentication?

如果我不是在做梦,任何人都会知道任何好的文章/ API让我走? 这些API不一定是免费的,因为我愿意拿出一些现金来加快速度。

这是完全可行的。 不过,我想指出的是,当发布绑定到Active Directory的服务器时,您将检查提供的用户名(通常是sAMAccountName)和输入的密码。 在C#中有几种方法,但许多人(包括我自己)选择使用System.DirectoryServicesSystem.DirectoryServices.Protocols命名空间。

这就是我目前将用户绑定到Active Directory的方式,然后根据此方法的结果,我显示授权失败的原因,或者我允许他们继续在应用程序中的帐户。

 //Define your connection LdapConnection ldapConnection = new LdapConnection("123.456.789.10:389"); try { //Authenticate the username and password using (ldapConnection) { //Pass in the network creds, and the domain. var networkCredential = new NetworkCredential(Username, Password, Domain); //Since we're using unsecured port 389, set to false. If using port 636 over SSL, set this to true. ldapConnection.SessionOptions.SecureSocketLayer = false; ldapConnection.SessionOptions.VerifyserverCertificate += delegate { return true; }; //To force NTLM\Kerberos use AuthType.Negotiate, for non-TLS and unsecured, use AuthType.Basic ldapConnection.AuthType = AuthType.Basic; ldapConnection.Bind(networkCredential); } catch (LdapException ldapException) { //Authentication failed, exception will dictate why } } 

如果您想进一步检索关于此用户的属性, 请在此处查看此主题 。

此外,我强烈建议Softerra的LDAP浏览器测试LDAP相关的任何东西 – 这是一个美妙的产品,它是免费的。 你可以从这里下载。

希望能让你朝着正确的方向前进。