此问题可能与链接https://serverfault.com/questions/377828/lookup-active-directory-entry-by-implicit-upn中的问题间接匹配。
我正在为公司使用的基于Asp.Net 4.0的网站项目而工作。
网站中有一个表单,它要求用户使用默认选择域名的AD用户名和密码。
我知道如何通过根域名认证用户。但是,有些用户的域名(UPN后缀)已被修改。
,例如,域名是xyz.com。因此,用户可以通过user@xyz.com及其密码进行身份验证。但对一些用户来说,他们的名字是user@abc.com。
,那么如何用根域名以外的其他UPN后缀来验证这些用户呢?
发布于 2014-01-15 16:50:57
经过大量的hit和试用方法的搜索,我能够合理地制定出解决方案。
下面的链接AD中的用户主体名称由豪尔赫·德阿尔梅达·平托在这里值得一提。请从那里获取iUPN和eUPN的详细信息。
我再次解释我的问题陈述,作为方案,以使它更清楚。
场景
您可以从链接带有C#的获得AD交互的想法,我发现它写得很好。
作为一名程序员,我想编写代码,使这两个用户从代码中登录AD。
问题
原因
我还没有找到完美的根本原因。
但我的猜测是,AD本身将域名放在@ (按速率计算)之后。因为Alex的域名是dummy.com,所以AD试图找到后缀为@dummy.com的用户。并以未找到的用户身份返回结果。
解决方案
您可以有其他未经授权的用户也可以通过这种方式进入的问题。不是的!因为密码需要匹配。
为什么会起作用?
因为AD能够用Alex@domain.com在domain.com中找到用户。
编辑
我提供的解决方案仅适用于其他用户具有相同域名的sAMAccountName的情况。
但是如果sAMAccountName本身被设置为Alex@dummy.com呢?所以真正的解决办法是-
(1)在UPN的基础上得到sAMAccountName。
/// <summary>
/// Get sAMAccountName for matching UserPrincipalName (UPN)
/// </summary>
/// <param name="domain">Domain name</param>
/// <param name="userName">Username</param>
/// <returns></returns>
protected string GetSamUsername(string domain, string userName)
{
string samName;
using (var pc = new PrincipalContext(ContextType.Domain, domain))
{
var user = UserPrincipal.FindByIdentity(pc, userName); // Search for this user
if (user == null) return null; // If user is not there, why go forward
samName = user.SamAccountName;
}
return samName;
}(2)现在由任何用户登录的都可以工作。
它还有助于我们在AD中验证用户的存在。
发布于 2014-01-13 20:27:05
如果第一次尝试失败(使用默认域名),则使用域名选项显示表单。
或者,为预先填写的域名提供一个文本框,用户可以在必要时修改该文本框。
当身份验证失败时,请确保向他们显示一条消息,指示他们需要注意您所显示的域名。
更新:
private void AuthenticateUser(string loginID, string pwd) {
var search = new DirectorySearcher(m_rootDir);
if (-1 < loginID.IndexOf("@")) {
search.Filter = "(&(objectClass=user)(SAMAccountName=" + loginID + "))";
} else { // this is their Common Name
search.Filter = "(&(objectClass=user)(cn=" + loginID + "))"; // Get User By Full Name
}
// more code here
}https://stackoverflow.com/questions/21100465
复制相似问题