楼主: byesun

请问一下ldap登录的功能要怎么样使用,谢谢

升级   0.83%

1

主题

16

回帖

83

积分

注册会员

Rank: 2

积分
83
发表于 2021-12-13 20:52:09 | 显示全部楼层
amic 发表于 2021-12-13 16:29
是指我必须在O2OA中新建用户,然后用户的唯一编码需要和AD中用户使用的登陆账号相同吗?
那我使用的也是sA ...

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

使用道具 举报

升级   0.83%

1

主题

16

回帖

83

积分

注册会员

Rank: 2

积分
83
发表于 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;
    }
}
回复

使用道具 举报

升级   100%

139

主题

1万

回帖

4万

积分

超级版主

Rank: 8Rank: 8

积分
41458
发表于 2021-12-14 10:42:22 | 显示全部楼层
byesun 发表于 2021-12-13 20:50
谢谢, 不过,我今天上班测试了一下,还是没有成功。

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

使用道具 举报

升级   0.49%

0

主题

8

回帖

49

积分

注册会员

Rank: 2

积分
49
发表于 2021-12-14 11:29:07 | 显示全部楼层
论坛管理员 发表于 2021-12-14 10:42
1.sAMAccountName=*,OU=Management,OU=Service Accounts,OU=[1] XXX,DC=XXX,DC=com
2.您的dn怎么这么奇怪 ...

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

使用道具 举报

升级   0.49%

0

主题

8

回帖

49

积分

注册会员

Rank: 2

积分
49
发表于 2021-12-14 11:30:00 | 显示全部楼层
另外问下,修改了LDAP配置信息以后,需不需要重启服务才能生效的?
还是实时的,我只要退出并切换账户就可以验证
回复

使用道具 举报

升级   0.49%

0

主题

8

回帖

49

积分

注册会员

Rank: 2

积分
49
发表于 2021-12-14 12:00:49 | 显示全部楼层

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


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

升级   0.83%

1

主题

16

回帖

83

积分

注册会员

Rank: 2

积分
83
发表于 2021-12-14 19:18:05 | 显示全部楼层
amic 发表于 2021-12-14 12:00
现在我的配置是这样的,O2中维护了两个用户,唯一编码分别是14HZ和san.zhang,使用的LDAP类型是Microsoft A ...

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

使用道具 举报

升级   0.83%

1

主题

16

回帖

83

积分

注册会员

Rank: 2

积分
83
发表于 2021-12-14 19:44:28 | 显示全部楼层
管理员帮忙指导一下,看是否漏了什么步骤
1.设定token.json ,把ldapauth 设定成true 及ldap信息
2.设定o2oa系统中测试账户的uid = AD域中的sAMAccountName
3.关闭o2oa后,重新启动。

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

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

谢谢管理员
回复

使用道具 举报

升级   0.83%

1

主题

16

回帖

83

积分

注册会员

Rank: 2

积分
83
发表于 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的根目录下面。

然后就可以了.  

   
回复

使用道具 举报

升级   0.83%

1

主题

16

回帖

83

积分

注册会员

Rank: 2

积分
83
发表于 2021-12-14 21:55:08 | 显示全部楼层
byesun 发表于 2021-12-14 20:34
我找到方案了。看源代码,还有一个参数需要调整
vim ./person.json   中的 "superPermission": false,

非常好用,谢谢管理员
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

联系客服 关注微信 下载APP 返回顶部 返回列表
viewthread