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

Superset API调用报错:CSRF会话令牌缺失问题求助

解决Superset POST请求「The CSRF session token is missing」问题

核心排查点及修复步骤

1. 确保请求头同时携带CSRF令牌和会话Cookie

Superset的CSRF验证依赖会话Cookie与X-CSRFToken请求头的配对,二者必须同时存在且关联同一会话:

  • 登录成功后,从响应Cookie中提取session(或superset_session,依Superset版本而定)和csrf_token(键名可能为csrf_token或XSRF-TOKEN)
  • 发起POST请求时,在请求头中同时添加这两项:
    headers = {
        'X-CSRFToken': '你的CSRF令牌值',
        'Cookie': 'session=你的会话Cookie值; csrf_token=你的CSRF令牌值'
    }
    

2. 正确获取CSRF令牌

禁止从静态页面或未登录的初始请求中提取CSRF令牌,必须在登录成功后从响应Cookie或响应内容中获取:

import requests

# 登录请求
login_res = requests.post(
    'http://superset:8088/api/v1/security/login',
    json={'username': 'admin', 'password': 'admin', 'provider': 'db'}
)
# 从响应Cookie中提取令牌和会话
csrf_token = login_res.cookies.get('csrf_token')
session_cookie = login_res.cookies.get('session')

3. 匹配POST请求的Content-Type和数据格式

如果向Superset API发送JSON数据,必须设置正确的Content-Type:

star_res = requests.post(
    'http://superset:8088/api/v1/dashboard/1/star',
    json={'starred': True},
    headers={
        'X-CSRFToken': csrf_token,
        'Cookie': f'session={session_cookie}',
        'Content-Type': 'application/json'
    }
)

若为表单提交,需将CSRF令牌放在表单字段csrf_token中,同时将Content-Type设为application/x-www-form-urlencoded。

4. 验证Superset部署的CSRF配置

检查部署命令中的CSRF相关环境变量,确保配置正确:

docker run -d \
    -p 8088:8088 \
    -e SUPERSET_SECRET_KEY='your-secret-key' \
    -e WTF_CSRF_ENABLED=True \
    -e WTF_CSRF_TIME_LIMIT=3600 \
    apache/superset

注意:WTF_CSRF_ENABLED需设为True(默认开启),若之前设为False会导致令牌逻辑异常。

5. 保持会话上下文一致

建议使用requests.Session()维护会话,自动处理Cookie传递,避免令牌与会话不匹配:

session = requests.Session()

# 登录,会话自动保存Cookie
session.post(
    'http://superset:8088/api/v1/security/login',
    json={'username': 'admin', 'password': 'admin', 'provider': 'db'}
)

# 发起POST请求,只需添加CSRF头
csrf_token = session.cookies.get('csrf_token')
star_res = session.post(
    'http://superset:8088/api/v1/dashboard/1/star',
    json={'starred': True},
    headers={'X-CSRFToken': csrf_token}
)

报错日志验证

若以上步骤无效,检查报错日志中的请求详情:

  • 确认请求头是否包含X-CSRFToken和正确的会话Cookie
  • 对比代码中使用的CSRF令牌与Superset前端页面当前会话的令牌是否一致

内容的提问来源于stack exchange,提问作者sam-wright-1

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 04:10:11