背景
- 简化登录流程:用户只需使用飞书账号登录,无需再记住 Superset 的单独账号和密码,实现 "一处登录,处处通行"。对于企业内部使用 Superset 的员工来说,大大方便了他们的操作,提高了工作效率。
- 增强安全性:OAuth2 协议采用了安全的授权流程,通过令牌来验证用户身份和授权访问权限,避免了用户密码在网络传输过程中被窃取的风险。同时,飞书作为专业的企业办公平台,拥有完善的安全机制和防护措施,能够为 Superset 的登录认证提供更高的安全性保障。
实现
修改配置
config.py
python
from flask_appbuilder.security.manager import AUTH_OAUTH
from custom_sso_security_manager import CustomSsoSecurityManager
AUTH_TYPE = AUTH_OAUTH
OAUTH_PROVIDERS = [
{
"name": "lark",
"token_key": "access_token", # Name of the token in the response of access_token_url
"icon": "fa-dove", # Icon for the provider
"remote_app": {
"client_id": "<| CV_SUPER_LARK_CLIENT_ID |>", # Client Id (Identify Superset application)
"client_secret": "<| CV_SUPER_LARK_CLIENT_SECRET |>", # Secret for this Client Id (Identify Superset application)
"access_token_method": "POST", # HTTP Method to call access_token_url
"api_base_url": "https://open.feishu.cn/open-apis/authen/v1/",
"access_token_url": "https://open.feishu.cn/open-apis/authen/v2/oauth/token",
"authorize_url": "https://accounts.feishu.cn/open-apis/authen/v1/authorize",
},
}
]
# Map Authlib roles to superset roles
AUTH_ROLE_ADMIN = 'Admin'
AUTH_ROLE_PUBLIC = 'Public'
# Will allow user self registration, allowing to create Flask users from Authorized User
AUTH_USER_REGISTRATION = True
# The default user self registration role
AUTH_USER_REGISTRATION_ROLE = "Gamma"
CUSTOM_SECURITY_MANAGER = CustomSsoSecurityManager
如果需要使用 mysql 存储 metadata 信息,需要覆盖 SQLALCHEMY_DATABASE_URI SQLALCHEMY_DATABASE_URI = "mysql://superset:strong_password@localhost:3306/superset"
如果使用官方 Helm chart 方式安装需要配置到configOverrides
yaml
configOverrides:
my_override: |
# 你的配置内容
custom_sso_security_manager.py
python
import logging
from superset.security import SupersetSecurityManager
class CustomSsoSecurityManager(SupersetSecurityManager):
def oauth_user_info(self, provider, response=None):
if provider == "lark":
me = self.appbuilder.sm.oauth_remotes[provider].get("user_info").json()['data']
logging.debug("user_data: {0}".format(me))
return {
"name": me["name"],
"email": me["email"],
"id": me["user_id"],
"username": me["en_name"],
"first_name": me["en_name"],
"last_name": me["name"],
}
如果使用官方 Helm chart 方式安装需要配置到
extraSecrets下面
yaml
extraSecrets:
custom_sso_security_manager.py: |
# custom_sso_security_manager.py 文件内容
效果

总结
Superset 基于 Flask AppBuilder 构建,Flask AppBuilder 目前同时只支持一种认证方式,OAuth2 和密码登录只能二选一,OAuth2 用户登录之后需要通过修改数据库的方式赋予用户 Admin 角色