Superset访客令牌返回登录页:仪表盘iframe嵌入问题排查
Superset仪表盘嵌入iframe显示登录页问题排查
我尝试将Superset仪表盘嵌入其他站点的iframe中,两个站点均使用HTTP协议。目前遇到的问题是:iframe始终显示登录页,在无痕窗口中打开生成的URL也同样显示登录页,需要让外部用户以访客身份查看仪表盘。
一、Superset配置参数
PUBLIC_ROLE_LIKE_GAMMA: True SESSION_COOKIE_SECURE = False SESSION_COOKIE_SAMESITE = 'LAX' SESSION_COOKIE_HTTPONLY = True PUBLIC_ROLE_LIKE: 'Gamma' HTTP_HEADERS = {'X-Frame-Options': 'ALLOWALL'}
二、后端生成访客Token的代码
myobj = { "user": { "username": "username", "first_name": "*****", "last_name": "*****" }, "resources": [{ "type": "dashboard", "id": "1" }], "rls": [] } login = requests.post(login_url, json={"password": "Password$","provider": "db","refresh": True, "username": "username"}) login_response = json.loads(login.text) headers = {'Authorization': f"Bearer {login_response['access_token']}"} csrf = requests.get(csrf_url, headers = headers) csrf_token = json.loads(csrf.text)['result'] headers_csrf = { 'accept': 'application/json', 'Authorization': f"Bearer {login_response['access_token']}", 'Referer': csrf_url, 'X-CSRFToken': csrf_token, } print(headers_csrf) guest_token = requests.post(guest_token_url, json = myobj, headers = headers_csrf) guest_token = json.loads(guest_token.text)['token'] print(guest_token) final_url = f"http://superset.hookit.korenet.local?token={guest_token}&next=/superset/dashboard/p/jWQx9XBR4Bw/?standalone=true"
三、生成的嵌入URL
http://superset.domain.local?token=*************************.eyJ1c2VyIjp7Imxhc3RfbmFtZSI6IkthbnNhcmEiLCJ1c2VybmFtZSI6InRrYW5zYXJhIiwiZmlyc3RfbmFtZS****************************************Ym9hcmQiLCJpZCI6IjEifV0sInJsc19ydWxlcyI6W10sImlhdCI6MTcwNDY2MDYzNS42ODgwMDYyLCJleHAiOjE3MDQ2NjA5MzUuNjg4MDA2MiwiYXVkIjoiaHR0cDovLzAuMC4wLjA6ODA4MC8iLCJ0eXBlIjoiZ3Vlc3QifQ.t2SZsWg66njR1He20cAcMA9mhkafuCZBqrX58jabqbo&next=/superset/dashboard/p/jWQx9XBR4Bw/?standalone=true
四、问题排查及修复建议
- 修正配置语法错误:配置中
PUBLIC_ROLE_LIKE_GAMMA和PUBLIC_ROLE_LIKE: 'Gamma'重复,且存在冒号赋值(Superset配置需用等号),统一改为PUBLIC_ROLE_LIKE = 'Gamma',删除重复项。 - 修复URL参数格式:
final_url里的仪表盘URL多了一个冗余问号,改为/superset/dashboard/p/jWQx9XBR4Bw?standalone=true,避免参数解析异常。 - 匹配仪表盘权限ID:访客Token里的
resources配置存在不匹配问题:- 若用仪表盘数字ID,需确认
id: "1"对应目标仪表盘的实际数字ID; - 若用仪表盘slug(即URL中的
jWQx9XBR4Bw),需将type改为"dashboard-slug",id改为"jWQx9XBR4Bw",否则权限不匹配会跳转到登录页。
- 若用仪表盘数字ID,需确认
- 调整Cookie跨域配置:将
SESSION_COOKIE_SAMESITE = 'LAX'改为SESSION_COOKIE_SAMESITE = 'None',适配iframe跨域场景(HTTP协议下需保持SESSION_COOKIE_SECURE=False)。 - 修正Token受众配置:解析生成的访客Token可见
aud字段为http://0.0.0.0:8080/,与实际Superset域名superset.domain.local不匹配。需在Superset配置中添加GUEST_TOKEN_AUDIENCES = ["http://superset.domain.local"],确保Token受众正确。 - 检查用户权限:确认生成访客Token的用户拥有
can_grant_guest_token权限,否则生成的Token无效。
内容的提问来源于stack exchange,提问作者tkansara
相关产品推荐
相关产品推荐

