本文档所描述的内容属于神策产品的高级使用功能,涉及较多技术细节,适用于对相关功能有经验的用户参考。如果对文档内容有疑惑,请咨询神策值班同学获取一对一的协助。

神策分析从 1.13 版本开始集成了 LDAP 登录认证,大致登录流程如下:

  1. 用户在神策系统中正常使用用户名和密码进行登录。
  2. 神策系统会使用用户填写的用户名和密码去后台配置的 LDAP 系统当中进行登录认证,登录成功之后用户就可以正常使用神策系统。
  3. 在 LDAP 系统中新建用户需要在神策登录之后,神策系统才会自动创建对应的用户。


admin 帐号不受 LDAP 控制

当配置了 ldap_type 配置项,表示开启了 LDAP,此后除了 admin 之外的帐号密码体系,都只通过 LDAP 进行验证。故如配置不成功,需要进行快速恢复,将 ldap_type 配置项进行删除即可。


配置项说明

参数范例是否必填参数说明
ldap_typeOpenLDAP、AdLDAP支持的 LDAP 类型
ldap_urlldap://10.XXX.XXX.XXX:389/LDAP 服务的地址
ldap_account_patternsAMAccountName=${username}

搜寻 LDAP 帐号的条件,${username} 为 用户名 的占位符,不能更改。

范例的含意是,搜寻属性 sAMAccountName 为 某帐号 的数据。通常

AdLDAP 为 sAMAccountName=${username}

OpenLDAP 为 uid=${username}

ldap_base_dnou=Members,DC=sensorsdata,DC=cn

LDAP Base DN,进行LDAP 用户名检索的 Base Dn。

DC 为 域名,范例的含意则表示域名为 sensorsdata.cn

OU 为 组织结构,LDAP 的结构为 DN → RDN → CN → OU → O → DC。

bind_ldap_admintrue、false

是否通过下面的 ldap_bind_user、ldap_bind_password 去登入 LDAP 系统,默认为 false。

一般在 LDAP 禁止了匿名访问的时候需要设置为 true 并配置 bind_ldap_admin、ldap_bind_password。

如果为 false 则用在神策登录页面的 帐号、密码 直接去登录 LDAP 系统。

ldap_bind_usersensorsAD当 LDAP 配置了禁止匿名访问的时候需要绑定的管理员账号,等同于 Bind DN。
ldap_bind_password**********当 LDAP 配置了禁止匿名访问的时候需要绑定的管理员密码。
ldap_search_filter
在 LDAP 中查找用户时是否按照指定的 filter 进行筛选
ldap_email_suffix@sensorsdata.cn

登录后的用户名添加邮箱后缀。

主要使用场景是接入 LDAP 之前已经使用了邮箱格式的用户名,接入 LDAP 之后使用的是不需要邮箱后缀的用户名,但仍然希望登录后和之前保持是同一个账号。

配置方式

修改单个配置

sa_cluster 账户下执行下列 shell 命令修改单个配置项:

spadmin config set product_global -p sbp -n 参数名 -v 参数值
BASH
spadmin config set server -p sbp -m web -n 参数名 -v 参数值
BASH
spadmin config set server -p sa -m web -n 参数名 -v 参数值
BASH
monitor_tools set_config -t server -m web -n 参数名 -v 参数值
BASH

删除单个配置

sa_cluster 账户下执行下列 shell 命令删除单个配置项。如果需要关闭 LDAP 的话,需要通过删除单个配置的方式实现。上方表格里所有参数都需要执行。

spadmin config delete product_global -p sbp -n 参数名 
BASH
spadmin config delete server -p sbp -m web -n 参数名 
BASH
spadmin config delete server -p sa -m web -n 参数名 
BASH
monitor_tools del_config -t server -m web -n 参数名 
BASH

查看当前所有配置项

spadmin config get product_global -p sbp
BASH
spadmin config get server -p sbp -m web
BASH
spadmin config get server -p sa -m web
BASH
monitor_tools get_config -t server -m web
BASH

一个完整的配置示例

spadmin config set product_global -p sbp -n ldap_type -v 'AdLDAP'
spadmin config set product_global -p sbp -n ldap_url -v 'ldap://10.XXX.XXX.XXX:389/'
spadmin config set product_global -p sbp -n ldap_account_pattern -v 'sAMAccountName=${username}'
spadmin config set product_global -p sbp -n ldap_base_dn -v 'ou=Members,DC=sensorsdata-inc,DC=cn'
spadmin config set product_global -p sbp -n bind_ldap_admin -v true
spadmin config set product_global -p sbp -n ldap_bind_user -v 'sensorsAD'
spadmin config set product_global -p sbp -n ldap_bind_password -v '**********'
spadmin config set product_global -p sbp -n ldap_search_filter -v 'memberOf=cn=xxx,ou=people,dc=example,dc=com'
spadmin config set product_global -p sbp -n ldap_email_suffix -v '@email.com'
BASH
spadmin config set server -p sbp -m web -n ldap_type -v 'AdLDAP'
spadmin config set server -p sbp -m web -n ldap_url -v 'ldap://10.XXX.XXX.XXX:389/'
spadmin config set server -p sbp -m web -n ldap_account_pattern -v 'sAMAccountName=${username}'
spadmin config set server -p sbp -m web -n ldap_base_dn -v 'ou=Members,DC=sensorsdata-inc,DC=cn'
spadmin config set server -p sbp -m web -n bind_ldap_admin -v true
spadmin config set server -p sbp -m web -n ldap_bind_user -v 'sensorsAD'
 spadmin config set server -p sbp -m web -n ldap_bind_password -v '**********'
spadmin config set server -p sbp -m web -n ldap_search_filter -v '(memberOf=cn=xxx,ou=people,dc=example,dc=com)'
spadmin config set server -p sbp -m web -n ldap_email_suffix -v '@email.com'
BASH
spadmin config set server -p sa -m web -n ldap_type -v 'AdLDAP'
spadmin config set server -p sa -m web -n ldap_url -v 'ldap://10.XXX.XXX.XXX:389/'
spadmin config set server -p sa -m web -n ldap_account_pattern -v 'sAMAccountName=${username}'
spadmin config set server -p sa -m web -n ldap_base_dn -v 'ou=Members,DC=sensorsdata-inc,DC=cn'
spadmin config set server -p sa -m web -n bind_ldap_admin -v true
spadmin config set server -p sa -m web -n ldap_bind_user -v 'sensorsAD'
spadmin config set server -p sa -m web -n ldap_bind_password -v '**********'
spadmin config set server -p sa -m web -n ldap_search_filter -v '(memberOf=cn=xxx,ou=people,dc=example,dc=com)'
spadmin config set server -p sa -m web -n ldap_email_suffix -v '@email.com'
BASH
monitor_tools set_config -t server -m web -n ldap_type -v 'AdLDAP'
monitor_tools set_config -t server -m web -n ldap_url -v 'ldap://10.XXX.XXX.XXX:389/'
monitor_tools set_config -t server -m web -n ldap_account_pattern -v 'sAMAccountName=${username}'
monitor_tools set_config -t server -m web -n ldap_base_dn -v 'ou=Members,DC=sensorsdata-inc,DC=cn'
monitor_tools set_config -t server -m web -n bind_ldap_admin -v true
monitor_tools set_config -t server -m web -n ldap_bind_user -v 'sensorsAD'
monitor_tools set_config -t server -m web -n ldap_bind_password -v '**********'
monitor_tools set_config -t server -m web -n ldap_search_filter -v '(memberOf=cn=xxx,ou=people,dc=example,dc=com)'
monitor_tools set_config -t server -m web -n ldap_email_suffix -v '@email.com'
BASH



配置验证方式

1. 安装 ldapsearch

# 在 root 用户下执行
yum install openldap-clients
BASH

2. 查看配置

spadmin config get product_global -p sbp
BASH
spadmin config get server -p sbp -m web
BASH
spadmin config get server -p sa -m web
BASH
monitor_tools get_config -t server -m web
BASH


3. 通过 ldapsearch 验证配置内容

# 格式:ldapsearch -p ${port} -h ${ip} -D '${ldap_bind_user}' -w '${ldap_bind_password}' -b '${ldap_base_dn}'
ldapsearch -p 389 -h 10.XXX.XXX.XXX -D 'sensorsAD' -w '**********' -b 'ou=Members,DC=sensorsdata,DC=cn'
BASH


3.1 确定能正常返回数据


IP 或 端口 错误,返回 Can't contact LDAP server (-1)



帐号密码错误,返回 Invalid credentials (49)


ldap_base_dn 的 DC 错误,返回 DSID-031007F9


ldap_base_dn 的 ou 错误,返回 DSID-03100241


4. 确定帐号搜寻条件一致

# 格式:ldapsearch -p ${port} -h ${ip} -D '${ldap_bind_user}' -w '${ldap_bind_password}' -b '${ldap_base_dn}' -x '${ldap_account_pattern}'
ldapsearch -p 389 -h 10.XXX.XXX.XXX -D 'sensorsAD' -w '**********' -b 'ou=Members,DC=sensorsdata,DC=cn' -x 'sAMAccountName=myUsername'
BASH


过滤条件错误,将搜寻不到数据


5. 使用神策命令进行登录验证

# 此命令适用于 SBP 0.6+ 版本
sbpadmin debug ldap -u '用户名' -p '密码'
BASH


重启 Web 

测试成功后,重启 web 生效:

spadmin restart -m web -p sbp
BASH
sa_admin restart -m web
BASH
spadmin restart -m web -p sa
BASH


同步LDAP域中的用户信息到神策(SBP >= 1.1.0)

SBP >= 1.1.0 时:支持客户在登录时获取ldap域中的信息同步到神策系统

1. 查看ldap域中的客户属性

# 此命令适用于 SBP 1.1.0+ 版本
sbpadmin debug ldap -u '用户名' -p '密码' -d
BASH

2. 根据ldap域中的客户属性配置映射信息

在登录时将ldap域中的用户信息同步到神策系统,目前支持的信息有:用户姓名,手机号,邮箱。

# 此命令适用于 SBP 1.1.0+ 版本, 配置示例:
spadmin config set product_global -p sbp -n ldap_user_mapping_map -v "{\"userCname\":\"user_cname_field\",\"phone\":\"phone_field\",\"email\":\"email_field\"}"
BASH

说明:以k-v的形式配置,其中userCname、phone、email分别对应用户姓名,手机号和邮箱,不可修改。user_cname_field,phone_field,email_field为ldap域中的客户属性字段。