Superset 配置飞书 OAuth2 登录

背景

  • 简化登录流程:用户只需使用飞书账号登录,无需再记住 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 角色

相关推荐
考虑考虑6 小时前
docker compose V2版本新属性
运维·后端·自动化运维
小小的木头人8 小时前
Ubuntu Samba修改端口绕过445封禁挂载
运维·ubuntu
GreenTea8 小时前
7000 万 QPS、500 PB:OpenAI 如何用一个 Python 存储平台撑住 10 亿用户
后端·架构
Flynt9 小时前
Java 27 升级实测:默认值动得比新特性多,有个老参数会让 JVM 直接起不来
java·jvm·后端
Bs_MoneyMagnet9 小时前
基于springboot+vue的个人健康管理系统的设计与实现 源码+文档
java·vue.js·spring boot·后端·vue3·springboot3·计算机毕业设计
GreenTea9 小时前
OpenAI Agents API 上手实测:一次调用把整个 agent loop 甩给 OpenAI
前端·后端·算法
wdfk_prog9 小时前
ROS教程:01 搭建 ROS1 Noetic Docker 开发环境
运维·缓存·docker·容器·ros
SEO_juper9 小时前
Java 并发编程实战:从线程基础到高并发架构
运维·人工智能·爬虫·chatgpt·seo
szephyr10 小时前
Docker + Compose 实战:把本地项目一键搬到云服务器,附完整配置
运维·docker·容器·部署·云服务器
wdfk_prog10 小时前
ros教程02:创建 catkin Workspace、Package 与第一个 ROS1 C++ Node
运维·缓存·docker·容器·ros