didi / KnowStreaming

一站式云原生实时流数据平台,通过0侵入、插件化构建企业级Kafka服务,极大降低操作、存储和管理实时流数据门槛
https://knowstreaming.com
GNU Affero General Public License v3.0
6.9k stars 1.28k forks source link

logikm配置了LDAP, 登陆没任何日志, 登陆报错: ldap authentication failed #492

Closed XzBuleSky closed 1 year ago

XzBuleSky commented 2 years ago

你好, 我尝试接入LDAP服务, 重启服务使用LDAP用户登录, 页面报错: ldap authentication failed 但日志没任何返回信息. 我这些配置在其他服务都可以正常接入LDAP服务, 比如jumpserver、yearning、grafana等等服务

account:
  jump-login:
    gateway-api: false            # 网关接口
    third-part-api: false         # 第三方接口
  ldap:
    enabled: True
    url: ldap://xxxx.xxxx.cn:389/
    basedn: dc=xxxxx,dc=xxxx
    factory: com.sun.jndi.ldap.LdapCtxFactory
    filter: sAMAccountName
    security:
      authentication: simple
      principal: uid=read,ou=xxxx,dc=xxxx,dc=cn
      credentials: xxxxx
    auth-user-registration: true
    auth-user-registration-role: normal

这个filter不清楚该填什么, 如果我填写以下配置, 就有报错信息返回 配置

filter:  
(&(uid={0})(|(memberof=cn=xxx,ou=xxx,dc=xx,dc=xxx)(memberof=cn=xxxx,ou=xxxx,dc=xxx,dc=xxx)))

返回错误:

javax.naming.directory.InvalidSearchFilterException: Missing 'equals'

当前显示的报错应该是找不到用户, 但我使用ldapsearch 指定了fliter是可以查询到自己的用户信息

XzBuleSky commented 2 years ago

我发现个问题, 我使用python语言调用LDAP服务, 这样调用是可以的, 第一个参数为 basedn

   这样执行是有用户信息返回
    conn.search('dc=xxxxxx,dc=la', '(&(objectClass=*)(cn=我的名称))', search_scope=SUBTREE)
   这样执行是没有用户信息返回
    conn.search('dc=xxxxxx,dc=la', '(&(objectClass=*)(cn=我的名称))', search_scope=SUBTREE)

但是源码文件中 第76行, search的第一个参数缺少了basedn

kafka-manager-extends\kafka-manager-account\src\main\java\com\xiaojukeji\kafka\manager\account\component\ldap\LdapAuthentication.java
NamingEnumeration<SearchResult> en = ctx.search("", filter, constraints);
ZQKC commented 2 years ago

近期我们关注一下,也欢迎PR

ZQKC commented 2 years ago

你好, 我尝试接入LDAP服务, 重启服务使用LDAP用户登录, 页面报错: ldap authentication failed 但日志没任何返回信息. 我这些配置在其他服务都可以正常接入LDAP服务, 比如jumpserver、yearning、grafana等等服务

account:
  jump-login:
    gateway-api: false            # 网关接口
    third-part-api: false         # 第三方接口
  ldap:
    enabled: True
    url: ldap://xxxx.xxxx.cn:389/
    basedn: dc=xxxxx,dc=xxxx
    factory: com.sun.jndi.ldap.LdapCtxFactory
    filter: sAMAccountName
    security:
      authentication: simple
      principal: uid=read,ou=xxxx,dc=xxxx,dc=cn
      credentials: xxxxx
    auth-user-registration: true
    auth-user-registration-role: normal

这个filter不清楚该填什么, 如果我填写以下配置, 就有报错信息返回 配置

filter:  
(&(uid={0})(|(memberof=cn=xxx,ou=xxx,dc=xx,dc=xxx)(memberof=cn=xxxx,ou=xxxx,dc=xxx,dc=xxx)))

返回错误:

javax.naming.directory.InvalidSearchFilterException: Missing 'equals'

当前显示的报错应该是找不到用户, 但我使用ldapsearch 指定了fliter是可以查询到自己的用户信息

这里的filter填写cn看一下,看是否正常了。

代码中组装Filter的方式:
(&(objectClass=*)(" + ldapFilter + "=" + userName + "))

看你给的说明:
conn.search('dc=xxxxxx,dc=la', '(&(objectClass=*)(cn=我的名称))', search_scope=SUBTREE)

所以可以试一下cn
ZQKC commented 1 year ago

无更多反馈,关闭该Issue