1.需求背景

在很多的应用项目中,客户会采用Windows域登录认证平台,要求 Smartbi 也能使用windows域账号密码进行验证,效果如下。

用户组的信息在登录的时候进行同步,根据用户的组信息再自动创建组,这个组是AD域组的信息(另外配置的AD域用户也会自动同步过来)

2. 使用说明

2.1. 扩展包部署

扩展包:Smartbi_Special_ADAuth

详细说明请参考Wiki链接:扩展包部署

更新扩展包之前,请做好知识库以及扩展包的备份。


2.2. 配置说明

1)获取ad.properties文件:

       从这里点击下载该文件<ad.properties>

2)打开ad.properties文件,修改参数。

如果包含中文,则需要将ad.properties重命名为ad_cn.properties,再使用<JDK>\bin\native2ascii.exe ad_cn.properties ad.properties转换中文字符后使用。

配置文件中的参数如下:

参数名含义原参数值修改
 provider_url配置AD域服务器的地址与端口ldap\://ADServer\:3268

修改ADServer和3268为windows域服务器名及端口,ADServer为Window域服务器IP地址或服务器名,端口可以是389或3628

注意:当URL中使用的端口号为3268的时候,会获取不到组织相关的属性,若需要获取到这些属性,需要将端口设置为389端口,同时,389端口对应的配置文件baseName属性不能为空。

login_user配置可以登录到windows域服务器的用户,用于获取用户信息username域用户的用户名
login_password可以登录windows域服务器的用户的密码,用于获取用户信息password与login_user用户对应的密码
principal_prefix配置用户名前缀MyDomain\\通常是域的名称+\\ ,这里域的名称是域名的第一个值,例如域名为ADLogin.com,此处值为ADLogin\\
principal_suffix配置用户名后缀

通常是@+域的名称,例如域名为ADLogin.com,则此处值为@ADLogin.com

注意:此配置项与principal_prefix只能二选一,不可同时配置,一般情况下只配置principal_prefix即可,但若是配置principal_prefix并排除其他问题后,可考虑改为配置此项,配置此项时,principal_prefix需为空

baseName

AD域域名


provider_url配置的端口是3628,此处可为空,若配置的端口为389,此处不能为空,值为域名,例如域名为ADLogin.com,则此处的值为DC=ADLogin,DC=com,可以使用Softerra LDAP Browser之类的工具查看
filterPrefix限制AD域查询范围的前缀(&(objectCategory\=Person)(sAMAccountName\=不修改
filterSuffix限制AD域查询范围的后缀))不修改
initial_context_factoryJAVA通过该工厂类com.sun.jndi.ldap.LdapCtxFactory不修改
security_protocol


在ad.properties中新增ldaps支持的配置项security_protocol,当使用的是ldaps时,使用security_protocol配置“ssl”,然后将provider_url设置为ldaps协议头和端口。

moveDisabledGroup

在ad.properties中新增moveDisabledGroup=xxxxx,配置一个自定义禁用组的ID未配置或者无值时,默认为DEPARTMENT。这个自定义的禁用组用于存放bi中有但AD中没有的用户,需要结合isDeleteUser来使用,当isDeleteUser=false时,这个配置项才会被用上。

在ad.properties中新增isDeleteUser=true/false,未配置或者无值时,默认为true。当isDelete=true时,在用户登录时,尝试登录一个AD域没有而bi中有且不在白名单中的用户时,会提示登录失败,并删除这个用户(即产品默认逻辑)。当isDeleteUser=false时,在用户尝试登录一个AD中没有但是BI中有,且这个用户不在BI的白名单中时,会提示登录失败,但是不会删除这个用户,而是将这个用户放置到上述配置的禁用组中。

isDeleteUser

在ad.properties中新增isDeleteUser=true/false,未配置或者无值时,默认为true。当isDelete=true时,在用户登录时,尝试登录一个AD域没有而bi中有且不在白名单中的用户时,会提示登录失败,并删除这个用户(即产品默认逻辑)。当isDeleteUser=false时,在用户尝试登录一个AD中没有但是BI中有,且这个用户不在BI的白名单中时,会提示登录失败,但是不会删除这个用户,而是将这个用户放置到上述moveDisabledGroup配置的禁用组中。

white_show_setting

在ad.properties中新增white_show_setting=true/false,未配置或者无值时,默认为true。这个配置项用于配置是否在系统选项中开放【AD账号白名单】系统选项,当white_show_setting=true时,会在系统选项中显示上述系统选项,否则不显示。

admin_default_login

在ad.properties中新增admin_default_login=true/false,未配置或者无值时,默认为true。这个配置项用于配置在使用本扩展包定义的登录验证类LDAPSAuthenication.java时,admin账号是否可以绕过AD域验证而直接走BI知识库验证(产品默认admin不进行AD验证)。当admin_default_login=true,即走产品默认逻辑。当admin_default_login=false时,非白名单情况下,admin账号不允许通过账号密码方式访问到bi系统中。

create_user_ad_check

在ad.properties中新增create_user_ad_check=true/false,未配置或者无值时,默认为false。这个配置项用于配置在bi中创建用户时,是否在点击“保存”时,使用创建用户的“名称”(即用户名)到AD域中进行校验,如果这个用户名在AD域中存在,则会创建成功,否则会创建失败并提示“非AD域下用户无法自行创建”。当create_user_ad_check=false,创建用户时不进行AD检查。当create_user_ad_check=true时,会执行上述检查。

default_create_user

在ad.properties中新增default_create_user=true/false,未配置或者无值时,默认为true。这个配置项用于配置AD域用户登录的时候,是否自动同步这个用户到BI中(产品默认会自动同步)。当default_create_user=true时,走产品默认逻辑,即AD验证通过后会自动同步用户。当default_create_user=false时,通过AD验证后,如果BI中没有这个用户,则抛出账号密码错误异常,也就是只有通过AD验证的用户,且这个用户也存在于BI中时,才能登录成功。

default_syn_group

在ad.properties中新增default_syn_group=true/false,未配置或者无值时,默认为true。这个配置项用于配置AD域用户登录时,同步的过程中是否同步这个用户的组到BI中(产品默认会同步)。当default_syn_group=true时,执行产品默认逻辑,会同步组。当default_syn_group=false时,登录产生的同步在同步用户时不会同步用户在AD域中的组。

       3、启动Smartbi 系统后进入http://localhost:18080/smartbi/vision/config.jsp 配置界面,

       3.1 配置为ad.properties存放在服务器上的位置

       

       3.2 修改"用户管理"配置段中的"加密类型"为CLASS,"登录验证类"为 smartbi.usermanager.auth.impl.ADAuthentication,具体如下图所示。ADAuthentication类的源码请参考 ADAuthentication.java
            

        4、配置完成后,点击右下角的"保存"按钮,根据提示再重启Smartbi 后,即可使用AD域用户的用户名和密码登录Smartbi。

3.注意事项

       若是配置后发现不能正常使用,可以通过下面方法来获取错误信息,以便定位到问题原因。

       1.下载testldap.jsp文件,并根据实际情况进行下面修改:

参数名含义原参数值修改
 provider_url配置AD域服务器的地址与端口ldap\://ADServer\:3268

修改ADServer和3268为windows域服务器名及端口,ADServer为Window域服务器IP地址或服务器名,端口可以是389或3628

注意:当URL中使用的端口号为3268的时候,会获取不到组织相关的属性,若需要获取到这些属性,需要将端口设置为389端口,同时,389端口对应的配置文件baseName属性不能为空。

login_user配置可以登录到windows域服务器的用户,用于获取用户信息username域用户的用户名
login_password可以登录windows域服务器的用户的密码,用于获取用户信息password与login_user用户对应的密码
principal_prefix配置用户名前缀MyDomain\\通常是域的名称+\\ ,这里域的名称是域名的第一个值,例如域名为ADLogin.com,此处值为ADLogin\\
principal_suffix配置用户名后缀

通常是@+域的名称,例如域名为ADLogin.com,则此处值为@ADLogin.com

注意:此配置项与principal_prefix只能二选一,不可同时配置,一般情况下只配置principal_prefix即可,但若是配置principal_prefix并排除其他问题后,可考虑改为配置此项,配置此项时,principal_prefix需为空

baseName

AD域域名


若provider_url配置的端口是3628,此处可为空,若配置的端口为389,此处不能为空,值为域名,例如域名为ADLogin.com,则此处的值为DC=ADLogin,DC=com,可以使用Softerra LDAP Browser之类的工具查看
filterPrefix限制AD域查询范围的前缀(&(objectCategory\=Person)(sAMAccountName\=不修改
filterSuffix限制AD域查询范围的后缀))不修改
initial_context_factoryJAVA通过该工厂类com.sun.jndi.ldap.LdapCtxFactory不修改
searchuser需要查询的用户administrator根据实际情况修改
其中域名的获取方法可见下图:
        
        
       2.将修改后的testldap.jsp文件放到smartbi.war/vision/目录中,并重启服务器;
       3.启动服务器后访问附件文件,访问地址为:http://ip:port/smartbi/vision/testldap.jsp(这里ip和port改成访问smartbi时的ip和端口),
   正常的访问截图如下:

   

        异常访问的截图:

   

       4.最后根据异常页面中的信息来判断哪里设置有误。