首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用备用UPN后缀验证AD用户

使用备用UPN后缀验证AD用户
EN

Stack Overflow用户
提问于 2014-01-13 20:12:11
回答 2查看 2.3K关注 0票数 0

此问题可能与链接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后缀来验证这些用户呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-15 16:50:57

经过大量的hit和试用方法的搜索,我能够合理地制定出解决方案。

下面的链接AD中的用户主体名称豪尔赫·德阿尔梅达·平托在这里值得一提。请从那里获取iUPN和eUPN的详细信息。

我再次解释我的问题陈述,作为方案,以使它更清楚。

场景

  1. 在Anil域中只有两个用户(domain.com),名为Anil和Alex。
  2. Anil的Anil@domain.com iUPN和Alex的iUPNAlex@domain.com (默认情况下由AD本身设置)。
  3. Anil的eUPN为空(这意味着它将是Anil@domain.com,AD的默认行为)。但是对于亚历克斯来说,它被设置为Alex@dummy.com,不管是什么原因。

您可以从链接带有C#的获得AD交互的想法,我发现它写得很好。

作为一名程序员,我想编写代码,使这两个用户从代码中登录AD。

问题

  • Anil@domain.com成功登录。
  • Alex@dummy.com 无法登录。

原因

我还没有找到完美的根本原因。

但我的猜测是,AD本身将域名放在@ (按速率计算)之后。因为Alex的域名是dummy.com,所以AD试图找到后缀为@dummy.com的用户。并以未找到的用户身份返回结果。

解决方案

  1. 解决方案是剖析用户名和域名。
  2. 根域名(domain.com)作为后缀追加到用户(带有单独的域名)。然后尝试登录。

您可以有其他未经授权的用户也可以通过这种方式进入的问题。不是的!因为密码需要匹配。

为什么会起作用?

因为AD能够用Alex@domain.com在domain.com中找到用户。

编辑

我提供的解决方案仅适用于其他用户具有相同域名的sAMAccountName的情况。

但是如果sAMAccountName本身被设置为Alex@dummy.com呢?所以真正的解决办法是-

(1)在UPN的基础上得到sAMAccountName。

代码语言:javascript
复制
/// <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中验证用户的存在。

票数 1
EN

Stack Overflow用户

发布于 2014-01-13 20:27:05

如果第一次尝试失败(使用默认域名),则使用域名选项显示表单。

或者,为预先填写的域名提供一个文本框,用户可以在必要时修改该文本框。

当身份验证失败时,请确保向他们显示一条消息,指示他们需要注意您所显示的域名。

更新:

代码语言:javascript
复制
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
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21100465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档