如何为Superset配置基于Active Directory的单点登录(SSO)
RHEL 7.5 下Superset 1.3.1对接AD SSO操作步骤
一、安装依赖
首先安装系统级依赖:yum install -y openldap-devel python3-devel gcc krb5-devel
激活Superset运行的虚拟环境(路径替换为你实际的虚拟环境路径):source /opt/superset/venv/bin/activate
安装Python依赖包,适配Superset 1.3.1版本:pip install python-ldap flask-ldap3-login==0.9.16
二、配置AD账号密码登录(基础版本)
如果只需要AD用户用域账号密码登录Superset,无需免密SSO,按以下配置:
编辑Superset配置文件superset_config.py(默认路径为~/.superset/superset_config.py,或你自定义的SUPERSET_CONFIG_PATH对应路径),添加以下内容,占位符替换为实际AD信息:
from flask_appbuilder.security.manager import AUTH_LDAP # 认证方式设置为LDAP AUTH_TYPE = AUTH_LDAP # AD域控地址,启用SSL请替换为ldaps://<域控IP>:636 AUTH_LDAP_SERVER = "ldap://<AD域控IP>:389" # 开启SSL时打开以下配置 # AUTH_LDAP_USE_SSL = True # AUTH_LDAP_TLS_CACERTFILE = "/path/to/ad_ca.crt" # 用于查询AD的服务账号,格式为 域名\\账号名 或完整DN AUTH_LDAP_BIND_USER = "DOMAIN\\query_user" AUTH_LDAP_BIND_PASSWORD = "<服务账号密码>" # AD用户搜索基准路径,替换为你实际的域结构 AUTH_LDAP_SEARCH = "DC=yourdomain,DC=com" # AD账号登录名字段,AD默认用sAMAccountName AUTH_LDAP_UID_FIELD = "sAMAccountName" # 首次登录自动创建Superset用户 AUTH_USER_REGISTRATION = True # 新用户默认角色,可设置为Admin/Gamma/Viewer等自定义角色 AUTH_USER_REGISTRATION_ROLE = "Gamma" # 可选:AD安全组映射Superset角色 AUTH_LDAP_GROUP_FIELD = "memberOf" AUTH_LDAP_SEARCH_GROUP = "OU=Groups,DC=yourdomain,DC=com" AUTH_ROLES_MAPPING = { "CN=Superset_Admin,OU=Groups,DC=yourdomain,DC=com": ["Admin"], "CN=Superset_Viewer,OU=Groups,DC=yourdomain,DC=com": ["Viewer"], } # 登录时自动同步角色 AUTH_LDAP_SYNC_ROLES_AT_LOGIN = True
三、配置域内免密SSO(Kerberos方案)
如果需要域内已登录AD的用户无需输入密码直接访问Superset,在上述基础配置外,额外执行以下操作:
3.1 配置系统Kerberos
编辑/etc/krb5.conf,替换为实际域信息:
[libdefaults] default_realm = YOURDOMAIN.COM dns_lookup_kdc = true dns_lookup_realm = true [realms] YOURDOMAIN.COM = { kdc = <AD域控IP> admin_server = <AD域控IP> default_domain = yourdomain.com } [domain_realm] .yourdomain.com = YOURDOMAIN.COM yourdomain.com = YOURDOMAIN.COM
3.2 生成服务keytab
在AD中为Superset服务创建服务主体,导出keytab文件上传到RHEL服务器的/etc/superset.keytab,设置权限:
chown superset:superset /etc/superset.keytab chmod 600 /etc/superset.keytab
3.3 调整Superset配置
在superset_config.py中修改认证方式,保留之前的LDAP配置用于同步用户信息:
from flask_appbuilder.security.manager import AUTH_REMOTE_USER AUTH_TYPE = AUTH_REMOTE_USER # 读取Kerberos认证传递的用户头 AUTH_REMOTE_USER_HEADER = "REMOTE_USER"
3.4 配置Web服务Kerberos认证
以Apache为例,启用mod_auth_kerb模块,在Superset对应的虚拟主机配置中添加以下内容:
<Location /> AuthType Kerberos AuthName "Superset SSO" KrbMethodNegotiate On KrbMethodK5Passwd Off KrbAuthRealms YOURDOMAIN.COM KrbServiceName HTTP/superset.yourdomain.com@YOURDOMAIN.COM Krb5KeyTab /etc/superset.keytab Require valid-user RequestHeader set REMOTE_USER %{REMOTE_USER}s </Location>
四、生效验证
- 测试配置合法性:在Superset虚拟环境下执行
superset check,无报错说明配置正确。 - 重启所有Superset相关服务:如果用systemd管理,执行
systemctl restart superset-*,同步重启Web服务(Apache/Nginx)。 - 验证登录:基础AD认证模式直接用域账号密码登录即可;免密SSO模式下,域内已登录用户访问Superset地址可直接进入系统,无需输入账号密码。
注意事项:
- 不要升级flask-ldap3-login到1.x版本,和Superset 1.3.1依赖的Flask-AppBuilder 3.x版本存在兼容性问题。
- 组映射配置的安全组DN必须和AD中的完全一致,否则无法正常同步角色。
- 启用LDAPS时需将AD的CA证书加入系统信任存储,避免证书校验失败。
内容的提问来源于stack exchange,提问作者SkOleg
相关产品推荐
相关产品推荐

