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 角色

相关推荐
DFT计算杂谈4 小时前
服务器通过pip安装Kimi Code CLI 和使用
运维·服务器·pip
有梦不弃8 小时前
模块化单体架构设计方案:DDD + 六边形架构落地实践
后端·架构
杨云龙UP8 小时前
MySQL 数据库常用备份工具对比:mysqldump、mydumper 与 XtraBackup
linux·运维·服务器·数据库·mysql·dba·备份恢复
PC2005-cloud8 小时前
从零上手 openGauss:Docker 部署 + 全场景连接教程
运维·docker·容器
独隅8 小时前
Cursor+GitOps 自动化运维实战:智能编写 Ansible 与 Terraform
运维·自动化·ansible
happymagic9 小时前
java spring boot做的jar包程序,如何实现自动运行启动
java·运维·服务器·spring boot·jar
星空你好9 小时前
AI辅助运维:开源一个内网日志监控工具
运维
风曦Kisaki9 小时前
Kubernetes(K8s)笔记Day06: 持久化存储(emptyDir,hostPath,NFS),PV 和 PVC,StorageClass存储类
linux·运维·笔记·云原生·容器·kubernetes
huainingning11 小时前
锐捷ssh用户名密码登录
运维·ssh
江南十四行12 小时前
Spring框架核心(上)——IoC控制反转与DI依赖注入详解
java·后端·spring