调用Superset的/api/v1/security/csrf_token/时缺失Authorization Header问题
问题根源
生产环境下Superset的安全策略默认比开发环境严格,/api/v1/security/csrf_token/端点被设置为需要认证才能访问,而本地开发环境为了调试便利,默认放开了这个限制,导致前后端环境行为不一致。
两种可行解决办法
办法1:修改配置让CSRF端点允许匿名访问
编辑Superset的核心配置文件superset_config.py,把CSRF令牌端点加入公开路由白名单:
PUBLIC_ROUTES = [ "/api/v1/security/csrf_token/", # 保留原有公开路由,比如登录接口 "/api/v1/security/login/", ]
保存配置后重启Superset服务,此时生产环境请求该端点就不需要带Authorization头了。
办法2:先完成认证再请求CSRF令牌
如果不想改动默认安全配置,得先拿到有效认证凭据:
- 会话模式:先调用
/api/v1/security/login/接口,传入用户名密码获取会话Cookie,后续请求CSRF端点时带上这个Cookie即可。 - JWT模式:如果启用了JWT认证,先通过对应接口获取Token,请求CSRF端点时在请求头里添加
Authorization: Bearer <你的JWT Token>。
注意事项
修改PUBLIC_ROUTES时只放开必要端点,避免扩大未认证访问范围带来安全风险;如果用认证后请求的方式,要确保前端逻辑先完成认证流程,再去获取CSRF令牌用于后续请求。
内容的提问来源于stack exchange,提问作者Muhamad Akbar Fadilah
相关产品推荐
相关产品推荐

