byesun 发表于 2021-12-13 20:52:09

amic 发表于 2021-12-13 16:29
是指我必须在O2OA中新建用户,然后用户的唯一编码需要和AD中用户使用的登陆账号相同吗?
那我使用的也是sA ...

我也没有成功, 你报的是什么错误?   我报的错误是密码错误或者用户不存在。 应该还没有跑到ldap检查的那一段代码。

byesun 发表于 2021-12-13 20:58:33

amic 发表于 2021-12-13 16:29
是指我必须在O2OA中新建用户,然后用户的唯一编码需要和AD中用户使用的登陆账号相同吗?
那我使用的也是sA ...

我感觉到我这个方法还没有跑到, 所以问题可能是更之前,要是官方出一个详细的设置指南就好了。

public class LdapTools {
    private static Logger logger = LoggerFactory.getLogger(LdapTools.class);

    public static boolean auth(String uid, String password){
      boolean result = false;
      DirContext ctx = null;
      try {
            String userName = Config.token().getLdapAuth().getUserDn();
            userName = StringUtils.replace(userName, "*", uid);
            String ldapUrl = Config.token().getLdapAuth().getLdapUrl();
            if(!ldapUrl.endsWith("/")){
                ldapUrl = ldapUrl+"/";
            }
            ldapUrl = ldapUrl + Config.token().getLdapAuth().getBaseDn();
            Hashtable env = new Hashtable();
            env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");//设置连接LDAP的实现工厂
            env.put(Context.PROVIDER_URL, ldapUrl);// 指定LDAP服务器的主机名和端口号
            env.put(Context.SECURITY_AUTHENTICATION, "simple");//给环境提供认证方法,有SIMPLE、SSL/TLS和SASL
            env.put("com.sun.jndi.ldap.connect.timeout", "3000");//连接超时设置为3秒
            env.put(Context.SECURITY_PRINCIPAL, userName);//指定进入的目录识别名DN
            env.put(Context.SECURITY_CREDENTIALS, password); //进入的目录密码
            //env.put("filter", filter);
            ctx = new InitialDirContext(env);
            result = true;
      } catch (AuthenticationException e) {
            logger.debug("ldap认证失败");
      } catch (Exception e) {
            logger.error(e);
      } finally {
            if (ctx != null) {
                try {
                  ctx.close();
                } catch (Exception e) {
                  logger.error(e);
                }
            }
      }
      return result;
    }
}

论坛管理员 发表于 2021-12-14 10:42:22

byesun 发表于 2021-12-13 20:50
谢谢, 不过,我今天上班测试了一下,还是没有成功。

1.sAMAccountName=*,OU=Management,OU=Service Accounts,OU= XXX,DC=XXX,DC=com
2.您的dn怎么这么奇怪,有这个?
3.您这个唯一名称有一个.您看看没有.的是否ok

amic 发表于 2021-12-14 11:29:07

论坛管理员 发表于 2021-12-14 10:42
1.sAMAccountName=*,OU=Management,OU=Service Accounts,OU= XXX,DC=XXX,DC=com
2.您的dn怎么这么奇怪 ...

1.sAMAccountName=*,OU=Management,OU=Service Accounts,OU= XXX,DC=XXX,DC=com
这个测试过,一样登陆不了
2.因为有多个部门,名称使用了分类
3.找了个没有带点的账户维护了唯一编码,也登陆不了,多次登陆失败后提示O2OA中对应的账户锁定了,说明能对应到O2OA的账户,只是LDAP那边有问题

amic 发表于 2021-12-14 11:30:00

另外问下,修改了LDAP配置信息以后,需不需要重启服务才能生效的?
还是实时的,我只要退出并切换账户就可以验证

amic 发表于 2021-12-14 12:00:49


现在我的配置是这样的,O2中维护了两个用户,唯一编码分别是14HZ和san.zhang,使用的LDAP类型是Microsoft Active Directory
现在我测试用14HZ和san.zhang及其AD密码登陆,都提示用户不存在,
反复输入以后会提示对应的O2账户锁定了。
不知道哪个步骤出问题了


byesun 发表于 2021-12-14 19:18:05

amic 发表于 2021-12-14 12:00
现在我的配置是这样的,O2中维护了两个用户,唯一编码分别是14HZ和san.zhang,使用的LDAP类型是Microsoft A ...

我也是重现了你的错误, 我觉得没有跑到ldap那一段

byesun 发表于 2021-12-14 19:44:28

管理员帮忙指导一下,看是否漏了什么步骤
1.设定token.json ,把ldapauth 设定成true 及ldap信息
2.设定o2oa系统中测试账户的uid = AD域中的sAMAccountName
3.关闭o2oa后,重新启动。

测试账号登录的时候, 报不存在或者密码错误。 重复多次登录,会报账号锁定。
等锁定期过了,使用测试账号和o2oa的默认密码,可以登录。

感觉步骤1 中的设定ldapauth = true没有生效。

谢谢管理员

byesun 发表于 2021-12-14 20:34:30

byesun 发表于 2021-12-14 19:44
管理员帮忙指导一下,看是否漏了什么步骤
1.设定token.json ,把ldapauth 设定成true 及ldap信息
2.设定o2o ...

我找到方案了。看源代码,还有一个参数需要调整
vim ./person.json   中的 "superPermission": false,

vim ./token.json中不适用UID,针对windows的修改成为 CN=*, 测试的时候,记得把测试账号拉到AD的根目录下面。

然后就可以了.

   

byesun 发表于 2021-12-14 21:55:08

byesun 发表于 2021-12-14 20:34
我找到方案了。看源代码,还有一个参数需要调整
vim ./person.json   中的 "superPermission": false,



非常好用,谢谢管理员
页: 1 [2] 3 4
查看完整版本: 请问一下ldap登录的功能要怎么样使用,谢谢