LDAP

The Lightweight Directory Access Protocol(LDAP)是一种软件协议 ,使任何人都可以在公共互联网或公司内网上查找网络中的组织、个人和其他资源的数据。LDAP 常用来为身份验证服务提供存储用户名和密码的功能。DolphinDB 提供 LDAP 插件,用于搜索 LDAP 服务器内的条目信息,进而实现在 DolphinDB 中进行 LDAP 第三方验证登录功能。

安装插件

版本要求

DolphinDB Server 2.00.10 及更高版本,支持 Linux x86-64。

安装步骤

  1. 在 DolphinDB 客户端中使用 listRemotePlugins 命令查看插件仓库中的插件信息。

    注意:仅展示当前操作系统和 server 版本支持的插件。若无预期插件,可自行编译(请选择对应分支下的插件)或在 DolphinDB 用户社区进行反馈。

    login("admin", "123456")
    listRemotePlugins()
  2. 使用 installPlugin 命令完成插件安装。

    installPlugin("LDAP")
  3. 使用 loadPlugin 命令加载插件。

    loadPlugin("LDAP")

接口说明

配置说明

1. 上传插件并配置启动加载

上传附件插件压缩包到所有节点所在服务器,解压到 <DolphinDB 安装目录>/plugins

在 Web 管理界面的 Controller Config 和 Nodes Config 中配置 preloadModules 值为 plugins::LDAP。如果之前已经配置过 preloadModules,则需要用逗号隔开之前的值。

2. 重启集群,定义登录函数视图

要求入参为:

username STRING 类型,登录输入的用户名。

password STRING 类型,登录输入的密码。

返回值为:

ANY VECTOR 类型,第一个元素为 DolphinDB 账户用户名,第二个为 DolphinDB 账户密码。

需要使用 LDAP::search 方法连接 LDAP Server 获取 DolphinDB 账户用户名和密码,以实现登录逻辑。

// 加载 LDAP 插件
try { loadPlugin("plugins/LDAP/PluginLDAP.txt") } catch(err) { print(err) }
go

// 定义一个与 login 函数前两个入参相同的函数
def ldap_login(username, password) {

    // 排除超级管理员账户
    if (username == "admin") {
        return [username, password]$ANY
    }

    // 根据入参查询 entry
    ret = LDAP::search("ldap://192.168.100.43","cn=ldapadm,dc=sample,dc=com", password, "dc=sample,dc=com", "(cn=" + username + ")")

    // 找同名的 entry
    dn = "cn=" + username + ",dc=sample,dc=com"

    // 注意返回的一定要是 ANY 类型的 vector
    // 这里是给账户的 facsimileTelephoneNumber 属性设置为 admin
    // telephoneNumber 属性设置为 123456, 进行模拟
    return [ret[dn]["facsimileTelephoneNumber"], ret[dn]["telephoneNumber"]]$ANY
}

// 加入函数视图
addFunctionView(ldap_login)

注意事项:

  1. 该视图须配置为仅 admin 管理员账户可见。
  2. 需要在视图内判断排除不需要通过 LDAP 鉴权的用户(例如超级管理员 admin),直接返回输入的用户名和密码,或者返回空也可以。
  3. LDAP::search 方法的 dn 参数应该基于 username 入参进行拼接。
  4. LDAP::search 方法的 password 参数应该基于 password 入参进行拼接。
  5. LDAP::search 方法的 filter 参数应该在 searchBase 下通过 username 入参拼接筛选出集群的特定用户。
  6. 实际使用的是 LDAP 中存储的用户的密码,DolphinDB 中存储的密码对于集群用户无实际意义,所以 DolphinDB 密码用 LDAP 返回的信息中任何一个对于该用户固定的值做密码即可。
  7. 如果需要在登录时创建不存在的用户,则可以先在视图内登录超级用户 admin(内部机制见事项 2),然后新建用户,最后使用新建的用户登录。

3. 关闭集群,修改所有控制节点的 controller.cfg 配置 thirdPartyAuthenticator 值为函数视图 ldap_login

thirdPartyAuthenticator 配置项参考:功能配置—登录

preloadModules=plugins::LDAP
thirdPartyAuthenticator=ldap_login

4. 重启集群,使用 LDAP 账户登录节点

login("ldapadm", "DolphinDB123@3");