0

我编写了以下方法来存储用户名以用于日志目的:-

if (ModelState.IsValid)
                {
string ADusername = User.Identity.Name.Substring(User.Identity.Name.IndexOf("\\") + 1);
repository.InsertOrUpdateTechnologyAssociation(ua, ADusername);
repository.Save();
//code hoes here
                }

以上会将管理员的用户名存储为“administrator”,全部小写。如果我从活动目录中检索用户名,如下所示:-

public List<DomainContext> GetADUsers(string term=null)
        {
            List<DomainContext> results = new List<DomainContext>();
            using (var context = new PrincipalContext(ContextType.Domain, "WIN-SPDEV"))
            using (var searcher = new PrincipalSearcher(new UserPrincipal(context)))
            {
                var searchResults = searcher.FindAll();



                foreach (Principal p in searchResults)
                {
                   if (term == null || p.SamAccountName.ToString().ToUpper().StartsWith(term.ToUpper()))
                   {
                    DomainContext dc = new DomainContext();
                    dc.DisplayName = p.DisplayName;
                    dc.UserPrincipalName = p.UserPrincipalName;
                    dc.Name = p.Name;
                    dc.SamAccountName = p.SamAccountName ;
                    dc.DistinguishedName =     p.DistinguishedName;

                    results.Add(dc);

                }
                }
            }
            return results;
        }

然后 Name & SamAccountName 将是“Administrator”,大写 A。所以这在我的应用程序内部引起了问题,因为当我尝试将登录用户与活动目录上的用户名进行比较时,结果总是错误的,因为管理员!=管理员。因此,为了解决这个问题,我通过将两个值更改为小写然后比较它们来编写我的比较如下:-

bool isadminByuser =  tms.SecurityRoles.Where(a => a.Name == "Administrator").SingleOrDefault().SecurityRoleUsers.Any(a => a.UserName.ToLower() == user.ToLower());

那么这样的比较是否会在将来引起问题,或者将 suername 更改为小写是安全的。?或者管理员和管理员可以代表两个不同的用户??谢谢

4

1 回答 1

2

Active Directory 用户名不区分大小写。所以基本上Administratoradministrator代表完全相同的帐户。

于 2013-10-28T21:20:14.767 回答