gpt4 book ai didi

c# - 自定义多因素 Active Directory 身份验证

转载 作者:可可西里 更新时间:2023-11-01 11:56:11 25 4
gpt4 key购买 nike

首先我会说我不知道​​我想要的是否真的可以完成。如果是这样,请毫不犹豫地告诉我,我在做梦。

我想在 C# 中创建自定义事件目录“身份验证器”。我的意思是,我希望每当有人登录时,首先检查他们存储在 AD 中的密码,然后执行第二步身份验证。只有两个步骤都通过后,用户才能登录。

现在,我想上面的内容并不太牵强,前提是我想将此身份验证器集成到定制产品中,对吧?我是否完全疯了,还想知道是否可以在登录 Windows 本身时使用此身份验证器?或者可能是针对 AD 进行身份验证的预先存在的产品?

如果我不是在做梦,是否有人也知道任何好的文章/API 来帮助我前进? API 不一定是免费的,因为我愿意花一些钱让事情进展得更快。

最佳答案

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

这就是我目前将用户绑定(bind)到 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
}
}

如果您想更进一步并检索有关此用户的属性,check out this thread here

此外,我强烈推荐使用 Softerra 的 LDAP 浏览器来测试任何与 LDAP 相关的内容——它是一个很棒的产品,而且是免费的。你可以 download it from here.

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

关于c# - 自定义多因素 Active Directory 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16036891/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com