精华内容
下载资源
问答
  • AD域登陆问题总结

    2014-06-20 17:53:46
    对在处理AD域过程中遇到的疑难问题及采取的解决方法进行总结,希望能够帮助大家
  • 验证AD域账号登陆,获取AD域用户列表,获取用户邮箱,修改密码等AD域操作
  • 关于AD域登陆问题总结。

    千次阅读 2015-12-23 09:29:07
    IIS7.0服务器+AD域服务器+客户端,来实现已加入AD域的用户直接登陆,未加入AD域的用户则通过公司的OA进行登陆

    前段时间,被公司安排要测试下是否可以用IIS7.0服务器+AD域服务器+客户端,来实现已加入AD域的用户直接登陆,未加入AD域的用户则通过公司的OA进行登陆。

    由于是个小萌新,对于网络服务方面都是两眼摸黑,于是只能先接住度娘。

    最优先的检索 是 AD域 之类的检索,于是检索出来了几篇定义,以及 在CSDN上的几篇 获取字段名之类的资料, 虽然有几篇需求和此需求大致相近,但都不了了之了。

     

    之后在bing上进行检索 检索的是 Form 验证与windows验证混合, 这时候贴近了  出来了一篇翻译文献: 在CSDN上有翻译:http://blog.csdn.net/kofkyo/article/details/5207993

    然后对应的原文:https://msdn.microsoft.com/en-us/library/ms972958.aspx

    以上实现是通过 改写401,403错误来使得 正确通过windows 认证的用户正常进入,错误的账户 跳转到重写页面上。

     

    之后开始查询 IIS6.0与IIS7.0区别,以及 在IIS7.0中如何实现混合认证。 发现中文检索并没有找到相关数据。

     

    于是通过google 查询 找到几篇论坛提问交流关于IIS7.0 的实现:

     

    最后发现实现表示 IIS7.0 也是可以与IIS6.0 一样实现在web.config中重写错误页面重定向的。

     

    这时候就发现了 CSDN上有一篇问答其实也是给出了相近的答案,与他的疑惑一样, 此方法必须要非加入域用户要输入错误3次或者取消掉windows认证窗口。

     

    重点小计:

     

    实现中可能需要设置 default 将对应winlogin 页面设为默认页面,这时候 将<location path=" ">中 设置为 windows认证,同时设置页面跳转,即将winlogin中的windows认证copy一份到初始页面上。

    展开全文
  • 验证AD域登陆

    千次阅读 2018-02-11 10:26:16
    这里只说一下具体操作,关于之类的知识,请百度或者谷歌。 一般分为两种,一种是没有证书验证,另一种是证书验证(SSL方式) 第一种: /* connect to ldap / public LdapContext connectLDAP(String userName,...

    这里只说一下具体操作,关于域之类的知识,请百度或者谷歌。
    一般分为两种,一种是没有证书验证,另一种是证书验证(SSL方式)
    第一种:
    /* connect to ldap /
    public LdapContext connectLDAP(String userName,String password) {
    // String userName = “Administrator”;//UserName
    // String password = “Test123456”;//PassWord
    String host = “”;//AD IP
    String domain = “”;//Domain suffix
    String port = “389”; //port 389
    String url = new String(“ldap://” + host + “:” + port);//Fixed writing
    String user = userName + domain;
    Hashtable env = new Hashtable();
    LdapContext ctx = null;
    env.put(Context.SECURITY_AUTHENTICATION, “simple”);//LDAP Access security level(none,simple,strong)
    env.put(Context.SECURITY_PRINCIPAL, user); //userName
    env.put(Context.SECURITY_CREDENTIALS, password);//password
    env.put(Context.INITIAL_CONTEXT_FACTORY,
    “com.sun.jndi.ldap.LdapCtxFactory”);// LDAP Factory
    env.put(Context.PROVIDER_URL, url);//Url
    try {
    ctx = new InitialLdapContext(env,null);// init
    System.out.println(“Authentication success!”);
    } catch (AuthenticationException e) {
    System.out.println(“Authentication failure!”);
    e.printStackTrace();
    } catch (javax.naming.CommunicationException e) {
    System.out.println(“AD Domain connection failure!”);
    e.printStackTrace();
    } catch (Exception e) {
    System.out.println(“Unidentified authentication exception!”);
    e.printStackTrace();
    }
    return ctx;
    }
    第二种:
    可以分为两种:
    2.1 有一种方法可以避开证书。(来自于某篇博客,但是我现在找不到了,感谢那位博主!)
    import java.security.cert.X509Certificate;

    import javax.net.ssl.X509TrustManager;

    public class DummyTrustManager implements X509TrustManager{
    public void checkClientTrusted( X509Certificate[] cert, String authType) {
    return;
    }
    public void checkServerTrusted( X509Certificate[] cert, String authType) {
    return;
    }
    public X509Certificate[] getAcceptedIssuers() {
    return new X509Certificate[0];
    }
    }

    import java.io.IOException;
    import java.net.InetAddress;
    import java.net.Socket;

    import javax.net.SocketFactory;
    import javax.net.ssl.SSLContext;
    import javax.net.ssl.SSLSocketFactory;
    import javax.net.ssl.TrustManager;

    public class DummySSLSocketFactory extends SSLSocketFactory{
    private SSLSocketFactory factory;

    public DummySSLSocketFactory() {
    try {
    SSLContext sslcontext = SSLContext.getInstance(“TLS”);
    sslcontext.init( null, // No KeyManager required
    new TrustManager[] { new DummyTrustManager()},
    new java.security.SecureRandom());
    factory = ( SSLSocketFactory) sslcontext.getSocketFactory();
    } catch( Exception ex) { ex.printStackTrace(); }
    }
    public static SocketFactory getDefault() {
    return new DummySSLSocketFactory();
    }
    public Socket createSocket( Socket socket, String s, int i, boolean flag) throws IOException {
    return factory.createSocket( socket, s, i, flag);
    }
    public Socket createSocket( InetAddress inaddr, int i, InetAddress inaddr1, int j) throws IOException {
    return factory.createSocket( inaddr, i, inaddr1, j);
    }
    public Socket createSocket( InetAddress inaddr, int i) throws IOException {
    return factory.createSocket( inaddr, i);
    }
    public Socket createSocket( String s, int i, InetAddress inaddr, int j) throws IOException {
    return factory.createSocket( s, i, inaddr, j);
    }
    public Socket createSocket( String s, int i) throws IOException {
    return factory.createSocket( s, i);
    }
    public String[] getDefaultCipherSuites() {
    return factory.getSupportedCipherSuites();
    }
    public String[] getSupportedCipherSuites() {
    return factory.getSupportedCipherSuites();
    }

    /* connect to ldap /
    @SuppressWarnings(“unused”)
    private boolean connectLDAPSuccesOrNot(String userName,String password,String host,String domain,String port,String keyStore,String sslPassWord) {
    boolean flag = false;
    // String userName = “Administrator”;//UserName
    // String password = “Test123456”;//PassWord
    // String host = “”;//AD IP
    // String domain = “”;//Domain suffix
    // String port = “636”; //port 636
    String url = new String(“ldap://” + host + “:” + port);//Fixed writing
    String[] strDomain = null;
    StringBuffer sb = new StringBuffer();
    if(!StringHelper.isEmpty(domain)){
    strDomain = domain.split(“\.”);
    }
    if(strDomain!=null){
    for(int i=0;i < strDomain.length;i++){
    sb.append(“,dc=”+strDomain[i]);
    }
    }
    String user = userName+”@”+domain ;
    Properties env = new Properties();
    if (“636”.equals(port)) {
    System.setProperty(“javax.net.ssl.trustStore”, keyStore);
    System.setProperty(“javax.net.ssl.trustStorePassword”, sslPassWord);
    env.put(Context.SECURITY_PROTOCOL, “ssl”);
    env.put(“java.naming.ldap.factory.socket”, “包名.DummySSLSocketFactory”);
    }
    LdapContext ctx = null;
    env.put(Context.SECURITY_AUTHENTICATION, “simple”);//LDAP Access security level(none,simple,strong)
    env.put(Context.SECURITY_PRINCIPAL, user); //userName
    env.put(Context.SECURITY_CREDENTIALS, password);//password
    env.put(Context.INITIAL_CONTEXT_FACTORY,
    “com.sun.jndi.ldap.LdapCtxFactory”);// LDAP Factory
    env.put(Context.PROVIDER_URL, url);//Url
    // env.put(“com.sun.jndi.ldap.connect.pool”, “true”);
    // env.put(“java.naming.referral”, “follow”);
    try {
    ctx = new InitialLdapContext(env,null);// init
    System.out.println(“Authentication success!”);
    flag = true;
    } catch (AuthenticationException e) {
    System.out.println(“Authentication failure!”);
    e.printStackTrace();
    } catch (javax.naming.CommunicationException e) {
    System.out.println(“AD Domain connection failure!”);
    e.printStackTrace();
    } catch (Exception e) {
    System.out.println(“Unidentified authentication exception!”);
    e.printStackTrace();
    } finally{
    return flag;
    }
    }
    2.2 需要证书
    2.2.1 安装域控制器,没什么难度,百度或者谷歌
    2.2.2 AD域控安装证书服务
    2.2.3 从ad域上拿ca证书文件
    http://ad域服务器IP/certsrv/
    2.2.4 去域控服务器上拿crt文件
    C:\Windows\System32\certsrv\CertEnroll
    2.2.5 安装cer或者crt文件到environment variables的JAVA_HOME path的\jre\lib\security文件夹
    重要
    2.2.6 执行 命令:
    cd environment variables的JAVA_HOME path的\jre\lib\security文件夹
    keytool -import -keystore “c:/testca.keystore” -file “changeit.crt” -storepass “changeit”
    keytool -import -keystore “c:/testca.keystore” -alias mkey -file “changeit.cer” -storepass “changeit”
    出现 Trusted this certificate? 按 “y” 即新增成功.
    System.setProperty(“javax.net.ssl.trustStore”, keyStore);
    System.setProperty(“javax.net.ssl.trustStorePassword”, sslPassWord);
    关于代码百度很多,自己找吧。
    吐槽以下,编辑器真难用。

    展开全文
  • java实现ad域登陆验证

    2017-03-31 11:12:00
    这里的username和password都是域登陆账号密码 public String checkMail(String userName,String password) { String host = "192.168.1.2"; // AD服务器IP(访问地址) String port = "389"; // 端口 // ...

    这里的username和password都是域登陆账号密码

      public String checkMail(String userName,String password) {
          String host = "192.168.1.2"; // AD服务器IP(访问地址)
          String port = "389"; // 端口
          // String domain = "@domain.com.cn"; //邮箱的后缀名
          String user="trustview\\tengfei";//这里有两种格式,domain\User或邮箱的后缀名,建议用domain\User这种格式
          String url = new String("ldap://" + host + ":" + port);
          // String user = userName.indexOf(domain) > 0 ? userName : userName + domain;
          Hashtable env = new Hashtable();
          DirContext ctx;
          env.put(Context.SECURITY_AUTHENTICATION, "simple");//ldap访问级别
          env.put(Context.SECURITY_PRINCIPAL, user); //ad user
          env.put(Context.SECURITY_CREDENTIALS, password);//ad password
          env.put(Context.INITIAL_CONTEXT_FACTORY,
          "com.sun.jndi.ldap.LdapCtxFactory");//ldap工厂类
          env.put(Context.PROVIDER_URL, url);
          try {
          ctx = new InitialDirContext(env);
          ctx.close();
          return userName; //验证成功返回name
          } catch (NamingException err) {
          return "";//验证失败返回空
          }
    
          }

     

    转载于:https://www.cnblogs.com/tengfeihhh/p/6650283.html

    展开全文
  • AD域单点登陆NTLM

    2018-04-12 12:39:53
    java 基于NTLM协议集成AD账号登录 内含JAR包,DEMO包以及说明文档
  • java AD域登陆验证并获取用户属性值

    千次阅读 2018-05-30 18:23:05
    public class ADDemo { /** * 使用java连接AD域 * @return void * @throws 异常说明 * @param host 连接AD域服务器的ip * @param post AD域服务器的端口 * @param username 用户名 * @param password 密码 *...
    public class ADDemo {
    

    /**
         * 使用java连接AD域
         * @return void  
         * @throws 异常说明
         * @param host 连接AD域服务器的ip
         * @param post AD域服务器的端口
         * @param username 用户名
         * @param password 密码
         */
        private static  void connect(String host,String post,String username,String password) {
            DirContext ctx=null;
            String company = "";
            String userName = "kejixinxi";
            Hashtable<String,String> HashEnv = new Hashtable<String,String>();
            HashEnv.put(Context.SECURITY_AUTHENTICATION, "simple"); // LDAP访问安全级别(none,simple,strong)
            HashEnv.put(Context.SECURITY_PRINCIPAL, username); //AD的用户名
            HashEnv.put(Context.SECURITY_CREDENTIALS, password); //AD的密码
            HashEnv.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory"); // LDAP工厂类
            HashEnv.put("com.sun.jndi.ldap.connect.timeout", "3000");//连接超时设置为3秒
            HashEnv.put(Context.PROVIDER_URL, "ldap://" + host + ":" + post);// 默认端口389
            try {
                ctx = new InitialDirContext(HashEnv);// 初始化上下文
                System.out.println("身份验证成功!");
             // 域节点  
             String searchBase = "DC=eppei,DC=com";  
             // LDAP搜索过滤器类  
             
            String searchFilter = "(&(objectCategory=person)(objectClass=user))";       //user表示用户,group表示组
             // 搜索控制器  
             SearchControls searchCtls = new SearchControls(); // Create the  
             // 创建搜索控制器  
             searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE); // Specify  
             // 设置搜索范围  
             // searchCtls.setSearchScope(SearchControls.OBJECT_SCOPE); //  
             // Specify the search scope 设置搜索范围  
             //String returnedAtts[] = { "memberOf", "distinguishedName",  
             //"Pwd-Last-Set", "User-Password", "cn" };// 定制返回属性  
             String returnedAtts[] = { "sAMAccountName","cloudExtensionAttribute" };// 定制返回属性  
               
             // String returnedAtts[] = { "url", "whenChanged", "employeeID",  
             // "name", "userPrincipalName", "physicalDeliveryOfficeName",  
             // "departmentNumber", "telephoneNumber", "homePhone",  
             // "mobile", "department", "sAMAccountName", "whenChanged",  
             // "mail" }; // 定制返回属性  
             searchCtls.setReturningAttributes(returnedAtts); // 设置返回属性集  
             // 根据设置的域节点、过滤器类和搜索控制器搜索LDAP得到结果  
             NamingEnumeration answer = ctx.search(searchBase, searchFilter,  
               searchCtls);// Search for objects using the filter  
             // 初始化搜索结果数为0  
             int totalResults = 0;// Specify the attributes to return  
             int rows = 0;  
             while (answer.hasMoreElements()) {// 遍历结果集  
          String uName= "";
              SearchResult sr = (SearchResult) answer.next();// 得到符合搜索条件的DN  
              System.out.println(++rows  
                + "************************************************");  
              String dn = sr.getName(); 
             System.out.println("dn------------------"+dn);
            //  System.out.println(dn);  
              String match = dn.split("CN=")[1].split(",")[0];//返回格式一般是CN=ptyh,OU=专卖 
             
             Attributes Attrs = sr.getAttributes();// 得到符合条件的属性集
          System.out.println(Attrs.size());
          if (Attrs != null) {  
           try {  
            for (NamingEnumeration ne = Attrs.getAll(); ne.hasMore();) {  
             Attribute Attr = (Attribute) ne.next();// 得到下一个属性  
             System.out.println(" AttributeID=属性名:"+ Attr.getID().toString());  
             // 读取属性值  
             for (NamingEnumeration e = Attr.getAll(); e.hasMore(); totalResults++) {  
             company =  e.next().toString();  
             System.out.println("    AttributeValues=属性值:" + company);  
             }  
             System.out.println("---------------");  
            }  
           } catch (NamingException e) {  
            System.err.println("Throw Exception : " + e);  
           }  
          }
     
              /*  System.out.println(match);  
                    if(userName.equals(match)){  
                    Attributes Attrs = sr.getAttributes();// 得到符合条件的属性集  
                    System.out.println(Attrs.size());
                    if (Attrs != null) {  
                     try {  
                      for (NamingEnumeration ne = Attrs.getAll(); ne.hasMore();) {  
                       Attribute Attr = (Attribute) ne.next();// 得到下一个属性  
                       System.out.println(" AttributeID=属性名:"+ Attr.getID().toString());  
                       // 读取属性值  
                       for (NamingEnumeration e = Attr.getAll(); e.hasMore(); totalResults++) {  
                       company =  e.next().toString();  
                       System.out.println("    AttributeValues=属性值:" + company);  
                       }  
                       System.out.println("---------------");  
                      }  
                     } catch (NamingException e) {  
                      System.err.println("Throw Exception : " + e);  
                     }  
                    }//if  
    */                /*}*/ 
         

             System.out.println("************************************************");  
             System.out.println("Number: " + totalResults);  
             ctx.close();  
             }
            } catch (AuthenticationException e) {
                System.out.println("身份验证失败!");
                e.printStackTrace();
            } catch (javax.naming.CommunicationException e) {
                System.out.println("AD域连接失败!");
                e.printStackTrace();
            } catch (Exception e) {
                System.out.println("身份验证未知异常!");
                e.printStackTrace();
            } finally{
                if(null!=ctx){
                    try {
                        ctx.close();
                        ctx=null;
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        }
        
        
      public static void main(String[] args) {
       
       connect("aaa.com", "389", "username", "password");
        }
        

        
    }
    展开全文
  • AD域帐户登陆过程

    2021-06-04 14:54:30
    首先帐户登陆过程分为:加终端查找控制器过程、认证登陆过程。 注释: Netlogon服务:控制器注册所有的SRV记录的服务; SRV记录:存储在DNS
  • 使用AD域登陆验证

    千次阅读 2018-04-16 15:45:00
     AD域是用来集中管理用户的,比如我们电脑上就有一个域设置,他可以用来设置我们的电脑允许和不允许的操作,比如不能安装乱七八糟软件什么的。只需要在域控制器上进行一道设置,就可以批量管理许多用户的设置,十分...
  • AD域验证登陆

    2017-05-12 12:47:00
    我这里就列举一些,在系统中集成ad域身份验证的一些配置信息,并一一解释他们的作用。 直接看代码: [java]   view plain   copy 1.  public   boolean  login() {  2. // 判断必填字段是否全部...
  • AD域首次登陆修改密码设置 设置pwdLastSet属性,为0首次登陆必须修改密码。 Csvde:批量导入、导出AD帐户 zhangyahui关注0人评论8880人阅读2011-01-17 11:31:13 Csvde Windows Server 2008 & ...
  • 所有分公司用户都通过总部的DC登陆,现时客户的AD没什么我想了解每一个客户端登陆AD时需占多少带宽?我担心大量用户登陆时,各分公司与总部的网络带宽不足。 回答:根据您的描述,我了解到您客户公司计划在只...
  •  我想問為何關掉了AD伺服器,  我仍可以使用先前登入過的domain user account 再次成功登入  我想了解這是甚麼回事及如何解决這問題   Answer:  控制器存储着目录数据,并管理用户和域的交互,包括用户...
  • 登陆AD域 登陆控制台,选择菜单栏->工具->同步配置->导入域组织结构,在域登录对话框中填写登录到目标域的必要信息,如域名、域用户名、用户密码。 其中,登录信息的“域”项,填写的是目标域的名称;...
  • AD域管理

    千次阅读 2013-11-12 09:04:19
    AD域管理 用户账户控制 首先登陆域控计算机。  打开Active Directory用户和计算机。 (路径:开始–>管理工具–> Active Directory用户和计算机) 打开AD用户和计算机控制台后,首先选择被添加人的...
  • 已经完成了配置如 2个虚拟机 一个作为AD域服务器,一个作为客户端,主机搭建IIS使用 VS2008 编制.aspx 页面。虚拟机之间交互以及主机之间都能够ping通,且客户端可以 登陆主机的页面。 之后该如何实现: 查询了各种...
  • 关于AD域的介绍

    万次阅读 多人点赞 2019-05-07 16:14:57
    关于AD域 第一次写博客,记录一下如何搭建自己的域服务器,以及其中遇到的一些问题,感谢“我的bug我做主”的文章《C#实现AD域验证登录(一)》,为防止原文被作者删除,手动将原文复制下来,如有侵权,请及时告知。...
  • 一、AD 属性对照表:http://blog.csdn.net/kxlf4600/article/details/4207563   “常规”标签 姓 Sn 名 Givename 英文缩写 Initials 显示名称 displayName 描述 Description 办公室 ...
  • 获取AD用户登入信息详细记录AD域用户登入过哪些终端电脑1:Dim conSet objSysInfo = CreateObject("ADSystemInfo")strUser = objSysInfo.UserNameSet objUser = GetObject("LDAP://" & strUser)UserName = ...
  • 实现流程:同步域账户用户名至项目数据库-》若是IE浏览器...步骤1:通过定时任务同步AD域账户用户名,代码如下 package com.honsto.edusys.job; import java.util.Date; import java.util.Hashtable; import javax.na
  • 官方 API:  ...   ... ...#selectFactor=(&(objectCategory\=person)) selectFactor=(&(objectClass...节点  String searchBase = "DC=wanda-dev,DC=cn";  searchBase = "OU="+OU+",DC="+dc+",DC="+dc_houzui; 
  • http://docs.tidyinfo.com/?p=309 http://www.haogongju.net/art/1656536 ...   AD扩展属性定义 发表于 2011 年 08 月 16 日 由 admin   安装 Activ...
  • Java实现AD域登录认证

    万次阅读 多人点赞 2016-08-04 09:05:02
    web项目中有时候客户要求我们使用ad域进行身份确认,不再另外做一套用户管理系统。其实客户就是只要一套账号可以访问所有的OA,CRM等办公系统。 这就是第三方验证。一般有AD域,Ldap,Radius,邮件服务器等。最常用的...
  • filenet设置双ad域、多ad域、域集群认证 昨天面试问到一个双ad域认证的问题,当时也只是在工作中听过,但没有亲身研究过,现在把结果分享给大家,只是理论研究没有实现过,不过应该是没问题的。 filenet ...
  • 由于AD域中administrator 权限特别大,不能让管理HR产品的管理员知道密码,所以导致启用了AD域名集成后,EAS的administrator无法使用。【应用场景】客户方启用了微软AD域与金蝶EAS8.2 集成【适用版本】EAS V8.2 云...
  • Active Directory概念AD(活动目录):是一种组织资源信息的方法,目录的意义在于我们可以通过标题或者说搜索条件来简单而有效率的在大量数据中查找匹配的信息。...一般AD域或与DNS域挂钩。AD DS(Active Directory Do...
  • 域/AD域

    2021-04-18 17:18:41
    AD域与工作组的区别: 工作组:分散的管理模式(各主机地位平等,没有管理与被管理之分) AD域:集中管理模式(各主机角色不平等,有管理与被管理之分) AD域管理的好处: 数据信息的安全性 权限分配的严格性 资源...
  • cas在windows下集成AD域

    千次阅读 2015-11-13 14:16:27
    cas单点登陆集成AD域

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,557
精华内容 3,422
关键字:

ad域登陆作用