You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何跳过Superset默认JWT Token认证,接入自定义认证服务?

用自研认证服务保护Superset REST API并跳过默认JWT认证的实现方案

1. 编写自定义认证中间件

创建Python中间件对接自研认证服务,完成请求合法性校验:

from flask import request, g
from superset.security import SupersetSecurityManager

class CustomAuthMiddleware:
    def __init__(self, app):
        self.app = app

    def __call__(self, environ, start_response):
        # 从请求头获取自研认证标识(示例为自定义X-Custom-Token)
        custom_token = request.headers.get('X-Custom-Token')
        
        # 调用自研认证服务验证token有效性
        is_valid, user_info = self.validate_with_custom_auth(custom_token)
        
        if not is_valid:
            # 验证失败直接返回401
            return self.app(environ, start_response)
        
        # 验证成功后设置Superset用户上下文
        sm = SupersetSecurityManager()
        user = sm.find_user(username=user_info['username'])
        if not user:
            # 按需自动创建Superset用户
            user = sm.add_user(
                username=user_info['username'],
                email=user_info.get('email'),
                first_name=user_info.get('first_name'),
                last_name=user_info.get('last_name'),
                roles=[sm.find_role('Admin')]  # 根据业务需求设置默认角色
            )
        g.user = user
        
        return self.app(environ, start_response)

    def validate_with_custom_auth(self, token):
        # 替换为自研认证服务的实际验证逻辑
        # 示例:校验token并返回(验证结果, 用户信息)
        if token == "your_valid_custom_token":
            return True, {"username": "custom_user", "email": "user@example.com"}
        return False, {}

2. 修改Superset配置,禁用默认JWT并注册中间件

在superset_config.py中添加以下配置:

# 禁用Superset默认JWT认证
JWT_AUTH_ENABLED = False

# 注册自定义认证中间件
from flask import Flask
from your_module import CustomAuthMiddleware  # 替换为中间件所在的实际模块路径

def apply_custom_auth(app: Flask) -> None:
    app.wsgi_app = CustomAuthMiddleware(app.wsgi_app)

ADDITIONAL_MIDDLEWARE = [apply_custom_auth]

# 设置允许访问API的角色(按需调整)
REST_API_AUTH_ROLE = "Admin"

3. 自定义安全管理器(可选,深度集成用)

如果需要更深度的认证逻辑定制,可替换默认安全管理器:

from superset.security import SupersetSecurityManager

class CustomSecurityManager(SupersetSecurityManager):
    def auth_user(self, username, password):
        # 自研认证已完成,直接返回上下文用户
        return g.user if hasattr(g, 'user') else None

# 在superset_config.py中配置自定义安全管理器
CUSTOM_SECURITY_MANAGER = CustomSecurityManager

4. 功能验证

  • 发送API请求时,仅携带自研认证的请求头(如X-Custom-Token: your_valid_custom_token),无需附加Superset默认JWT Token。
  • 验证合法请求可正常访问API,未携带有效自研认证标识的请求返回401未授权。

内容的提问来源于stack exchange,提问作者abhishek Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 10:18:26