如何使用Windows身份验证获取电子邮件地址

5
我正在使用ASP.net MVC框架设计一个Web应用程序。我想使用Windows身份验证并使用Role Manager SQLRoleProvider进行角色检查。
如何确定当前已登录用户的电子邮件地址?这是否可能?
如果有多个域的内部网络环境,这将影响应用程序的部署(我认为这很重要)。
谢谢您的帮助!
4个回答

13

这是一段代码示例:

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

1
谢谢这个。 :) - Ryan Wilson

4

此链接已失效。通常建议不要使用链接,原因在于此。请发布示例代码。(针对 @Raiden Flyboy) - Boris Callens

0
在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函数。还要添加使用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 "";
            }

        }

2
我认为即使您删除域名,用户名也不等于电子邮件账户。 - MichaelMao
@MichaelMao 我认为他不仅仅是删除域名,同时还调用了'uEmail'方法,该方法从AD中获取电子邮件地址。 - tareq aziz
相信 System.Security.Principal.WindowsIdentity.GetCurrent() 并不能给你客户端的身份,而是网站托管用户的身份... - Pieterjan

-1

ASP.NET的成员服务数据库只是一个数据库,您可以直接执行查询。但我认为默认的成员提供程序没有获取电子邮件地址的方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接