【问题标题】:How to obtain email address with window authentication如何通过窗口身份验证获取电子邮件地址
【发布时间】:2010-12-10 22:51:32
【问题描述】:

我正在使用 ASP.net MVC 框架设计一个 Web 应用程序。我想使用 Windows 身份验证并使用角色管理器 SQLRoleProvider 进行角色检查。

如何确定当前登录用户的电子邮件地址?这甚至可能吗?

应用程序将部署在多域 Intranet 中,如果这很重要(我认为它确实如此)。

感谢您的帮助!

【问题讨论】:

    标签: asp.net asp.net-mvc email windows-authentication


    【解决方案1】:

    您可以在 Active Directory 中查找用户的属性。这是一篇很棒的文章,解释了如何使用 System.DirectoryServices 和 C# 来做到这一点:

    http://www.codeproject.com/Articles/6778/How-to-get-User-Data-from-the-Active-Directory

    【讨论】:

    • **此链接不再有效。出于这个原因,通常建议不要使用链接。请发布示例代码。 (对于@Raiden Flyboy)
    【解决方案2】:

    asp.net 会员服务数据库只是一个数据库,您可以直接对其执行查询。我不认为默认的会员提供商有办法获取电子邮件地址。

    【讨论】:

      【解决方案3】:

      这是一些代码的示例:

      DirectorySearcher searcher = new DirectorySearcher();    
      searcher.Filter = string.Format("sAMAccountName={0}", _name);    
      SearchResult user = searcher.FindOne();    
      string emailAddr = user.Properties["mail"][0].ToString();
      

      【讨论】:

      • 谢谢。 :)
      【解决方案4】:

      在 MVC5 应用程序中给出如下所示的操作

        public ActionResult Index()
              {
                  string name = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
                  ViewBag.Name = name;
                  ViewBag.Email = uEmail(User.Identity.Name.Replace(@"YOURDOMAIN\", ""));
                  return View();
              }
      

      YOURDOMAIN 更改为您的域名。并给出如下所示的 uEmail 函数。还要添加对 using System.Security.Principalusing System.DirectoryServices 的引用。

      private string uEmail(string uid)
              {
                  DirectorySearcher dirSearcher = new DirectorySearcher();
                  DirectoryEntry entry = new DirectoryEntry(dirSearcher.SearchRoot.Path);
                  dirSearcher.Filter = "(&(objectClass=user)(objectcategory=person)(mail=" + uid + "*))";
      
                  SearchResult srEmail = dirSearcher.FindOne();
      
                  string propName = "mail";
                  ResultPropertyValueCollection valColl = srEmail.Properties[propName];
                  try
                  {
                      return valColl[0].ToString();
                  }
                  catch
                  {
                      return "";
                  }
      
              }
      

      【讨论】:

      • 我认为即使您删除了域,用户名也不等于电子邮件帐户
      • @MichaelMao 我认为他不只是删除域,同时调用 'uEmail' 方法,从 AD 中获取电子邮件地址
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 2017-05-12
      相关资源
      最近更新 更多