这个问题可能间接地与这里链接的问题相匹配。
我正在开发基于Asp.Net 4.0的网站项目供企业使用。
网站上有一个表格,要求用户提供其AD用户名和密码以及默认情况下选择的域名。
我知道通过根域名对用户进行身份验证的方法。但是有些用户的域名(UPN后缀)已被修改。
例如,域名是xyz.com。因此,用户通过[email protected]及其密码进行身份验证。但是对于某些用户,其名称为[email protected]。
那么,如何用根域名以外的替代UPN后缀来验证此类用户呢?
经过大量的搜索和试用方法搜索后,我有理由提出了解决方案。
以下是Jorge de Almeida Pinto撰写的AD中的用户主体名称链接。请从此处获取有关iUPN和eUPN的详细信息。
我将再次说明我的问题陈述,以使其更加清晰。
您可以从链接Active Directory With C#中获得有关AD交互的想法,我发现它写得很好。
作为一名程序员,我想编写代码以使这两个用户都从代码登录到AD。
我还没有找到完美的根本原因。
但是我的猜测是,AD本身将域名放在@之后(按速率)。由于Alex的域名为dummy.com,因此AD尝试找到后缀为@ dummy.com的用户。并返回结果,因为找不到用户。
您可能会遇到其他未经授权的用户也可以通过这种方式进入的问题。不!因为密码需要匹配。
为什么行得通?
因为AD能够在domain.com中找到使用[email protected]的用户。
我提供的解决方案仅在其他用户具有相同域名的相同sAMAccountName的情况下有效。
但是,如果sAMAccountName本身设置为[email protected],该怎么办。因此,真正的解决方案是-
(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中用户的身份。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句