zoukankan      html  css  js  c++  java
  • .Netcore AD 操作

    1.   NUget 引入:

         System.DirectoryServices

                      System.DirectoryServices.AccountManagement

    2  登陆种情况:有登陆界面和无登陆界面

    2.1. 有登陆界面,有表单,输入用户名密码,后台拿到用户名密码,找AD 服务器验证

    protected virtual bool ValidateCredentials(PrincipalContext principalContext, string userNameOrEmailAddress, string plainPassword)
            {
                return principalContext.ValidateCredentials(userNameOrEmailAddress, plainPassword, ContextOptions.Negotiate);
            }

    2.2. 无登陆界面,浏览器弹出密码输入框。

    需要做的有:

    1. IIS 支持安装  Windows Authentication
    2. .NetCore 选择windows 认证。
    3. Action上带上 Authoriz(…)   (.NetCore 3.1 模板,自己会加上这一步。)

    3.根据组名获取邮箱(下面代码是先获取组成员,再得到他的邮箱):

    public string[] GetEmails(string groupName)
            {
                DirectorySearcher ds = new DirectorySearcher();
                ds.SearchRoot = new DirectoryEntry("LDAP://" + _appConfiguration["Container"]);
                ds.Filter = $"(&(objectClass=group)(cn={groupName}))";
                var ms = new List<string>();
                foreach (SearchResult result in ds.FindAll())
                {
                    DirectoryEntry deGroup = new DirectoryEntry(result.Path);
                    var pcoll = deGroup.Properties["member"];
                    for (int l = 0; l < pcoll.Count; l++)
                    {
                        var n = pcoll[l].ToString();
                        DirectoryEntry deUser = new DirectoryEntry($"LDAP://{n}");
                        ms.Add(deUser.Properties["mail"][0].ToString());
                    }
                }
                return ms.ToArray();
            } 

     4.对于Windows认证,很容易获取到 Name.

    怎么根据Name,获取组呢? 既然在域中,网站服务器知道AD服务器在哪儿,代码不用关心这个了。

    下面代码实现这个。

    DirectoryEntry entry = new DirectoryEntry();
    
    DirectorySearcher search2 = new DirectorySearcher(entry);
    search2.Filter = $"(cn={Name})";
    search2.PropertiesToLoad.Add("memberOf");
               
               
    SearchResult result2 = search2.FindOne();
    
    foreach (var item in result2.Properties["memberof"])
        {
            Console.WriteLine(item.ToString());
        } 
                    
    Console.Read();
    

      

    气功波(18037675651)
  • 相关阅读:
    帝国cms 同个IP可提交一次
    帝国cms 图片相对路径绝对路径设置问题+帝国cms 手机端调用图片问题
    帝国CMS 手机版制作+帝国PC跳转到手机+重新定向
    帝国cms 相关问题
    简洁 清晰弹出层讲解制作(图片点击放大)
    webstorm 2016最新版破解+汉化
    ajax点击不断加载数据列表
    js中substr,substring,indexOf,lastIndexOf,split的用法
    Parallax.js|强大的javascript视觉差特效引擎
    一行代码解决各种IE兼容问题,IE6,IE7,IE8,IE9,IE10
  • 原文地址:https://www.cnblogs.com/qgbo/p/13573263.html
Copyright © 2011-2022 走看看