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

Apache Superset与Jumpcloud OIDC集成报错:redirect_uri不匹配

解决Apache Superset与Jumpcloud OIDC集成时redirect_uri协议不匹配问题

问题根源

核心问题是Superset生成的redirect_uri使用了HTTP协议,而Jumpcloud端预注册的是HTTPS协议地址,导致OAuth验证失败。这通常是因为Superset未正确识别前端的HTTPS请求,即便配置了ENABLE_PROXY_FIX,仍需补充关键配置强制使用HTTPS生成URL。

解决方案

1. 强制Superset使用HTTPS生成URL

在你的superset_config.py中添加以下配置,覆盖默认URL协议设置:

# 新增HTTPS强制配置
SERVER_NAME = "superset.dev"
PREFERRED_URL_SCHEME = "https"

修改后的完整配置片段示例:

from flask_appbuilder.security.manager import AUTH_OAUTH
AUTH_TYPE = AUTH_OAUTH
AUTH_USER_REGISTRATION = False
ENABLE_PROXY_FIX = True
PROXY_FIX_CONFIG = {"x_for": 1, "x_proto": 1, "x_host": 1, "x_port": 0, "x_prefix": 1}
# 新增HTTPS强制配置
SERVER_NAME = "superset.dev"
PREFERRED_URL_SCHEME = "https"

OAUTH_PROVIDERS = [
{
    'name': 'jumpcloud',
    'icon': 'fa-address-card',
    'remote_app': {
        'client_id': 'abc',
        'client_secret': 'xyz',
        'server_metadata_url': 'https://oauth.id.jumpcloud.com/.well-known/openid-configuration',
        'redirect_uri': 'https://superset.dev/oauth-authorized/jumpcloud'
    }
}
]
import logging
from superset.security import SupersetSecurityManager

class CustomSsoSecurityManager(SupersetSecurityManager):
    def oauth_user_info(self, provider, response=None):
        logging.debug("Oauth2 provider: {0}.".format(provider))
        if provider == 'jumpcloud':
            me = self.appbuilder.sm.oauth_remotes[provider].get('userDetails').data
            logging.debug("user_data: {0}".format(me))
            return { 
                'name' : me['name'], 
                'email' : me['email'], 
                'id' : me['user_name'], 
                'username' : me['user_name'], 
                'first_name' : me['first_name'], 
                'last_name' : me['last_name']
            }
CUSTOM_SECURITY_MANAGER = CustomSsoSecurityManager

2. 确保反向代理正确传递HTTPS头

若Superset部署在反向代理(如Nginx、Apache)之后,必须确保代理服务器正确传递X-Forwarded-Proto头,否则ENABLE_PROXY_FIX无法识别请求的真实协议。以Nginx为例,配置片段需包含:

location / {
    proxy_pass http://your-superset-internal-address:8088;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;  # 关键:传递真实协议
}

3. 验证与测试

  1. 保存修改后的superset_config.py,重启Superset服务
  2. 从Jumpcloud控制台再次点击Superset图标发起登录
  3. 通过Chrome开发者工具查看跳转请求中的redirect_uri参数,确认其已变为https://superset.dev/oauth-authorized/jumpcloud
  4. 若参数正确,OAuth验证将通过,成功跳转至Superset

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 13:22:14