想要将内部系统认证与superset打通,必须要了解superset的认证体系。
Superset的认证体系
Superset的认证体系可以通过以下几种方式进行配置:
-
基于LDAP认证:Superset可以集成LDAP以验证用户身份。在这种情况下,Superset将根据LDAP中的用户信息进行身份验证,并从LDAP中获取用户属性和组织结构信息。
-
基于OAuth2认证:Superset支持OAuth2认证和授权。在这种情况下,Superset将重定向用户到OAuth2提供商的登录页,并在用户授权时获取访问令牌以进行身份验证。
-
本地认证:Superset还支持本地认证,其中用户可以在Superset中创建帐户并设置密码。在这种情况下,Superset将使用这些凭据来验证用户身份。
无论使用哪种认证方式,管理员都可以控制哪些用户可以访问Superset中的特定资源。例如,可以定义哪些用户可以访问特定的数据源、仪表板或视图。此外,管理员还可以定义角色和权限,以控制用户在Superset中的操作范围。
二次开发,重写认证
系统配置文件: \superset\config.py
配置缓存
在config.py里面配置
Reids_Url = '127.0.0.1'
Reids_Port = 6379
# Cache for datasource metadata and query results
DATA_CACHE_CONFIG: CacheConfig = {'CACHE_TYPE': 'redis', # 使用 Redis
'CACHE_REDIS_HOST': Reids_Url, # 配置域名
'CACHE_REDIS_PORT': Reids_Port , # 配置端口号
'CACHE_REDIS_URL': 'redis://' + Reids_Url + ':' + str(Reids_Port)
}
配置认证管理类
在config.py里面配置
from superset.custom_sso_security_manager import CustomSsoSecurityManager
CUSTOM_SECURITY_MANAGER = CustomSsoSecurityManager
新建类
自定义视图:MyAuthRemoteUserView
class MyAuthRemoteUserView(AuthRemoteUserView):
# this front-end template should be put under the folder `superset/templates/appbuilder/general/security`
# so that superset could find this templates to render
login_template = 'appbuilder/general/security/login_my.html'
title = "My Login"
@expose('/test', methods=['GET', 'POST'])
def test(self):
data = {}
# for name in request.environ:
# if (type(request.environ[name]) == str or type(request.environ[name]) == int):
# data[name] = request.environ[name]
# return data
response = _wz_redirect('/login/')
print(response.headers)
return response
# this method is going to overwrite
# https://github.com/dpgaspar/Flask-AppBuilder/blob/mas