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

通过Dex(OAuth/OpenID Connect)连接Superset并映射Dex组到角色的配置问题

Superset 对接 Dex 并实现用户组角色映射的 Helm 配置方案

前置校验

  • 确保 Dex 侧已为 Superset 客户端配置正确的回调地址:https://<你的Superset服务域名>/oauth-authorized/egaSSO
  • 确保 Dex 客户端已开放 openid、email、profile、groups 四个授权范围
  • 确保 Superset 已安装 OAuth 依赖,可通过 Helm 配置的 extraPipPackages 字段添加 Authlib 依赖

原有配置无效的核心原因是缺少三个关键配置项:授权scope声明、用户信息字段映射规则、用户组到角色的同步逻辑,下述配置已补充所有必填内容。

完整可用配置

在 Superset Helm Chart 的 values.yaml 文件中添加以下配置段:

superset:
  extraPipPackages:
    - Authlib==1.2.0
  config:
    # 基础认证配置
    AUTH_TYPE: AUTH_OAUTH
    ENABLE_PROXY_FIX: True
    SYNC_ROLES_AT_LOGIN: True
    SYNC_USER_ROLE_FROM_OAUTH: True
    # 映射Dex用户组到Superset角色的规则,可根据实际场景修改
    OAUTH_GROUP_ROLE_MAPPING: {
      "dex-admin-group": "Admin",
      "dex-editor-group": "Alpha",
      "dex-viewer-group": "Gamma"
    }
    OAUTH_PROVIDERS = [
      {
        'name': 'egaSSO',
        'token_key': 'access_token',
        'icon': 'fa-address-card',
        'remote_app': {
          'client_id': 'myClientId',
          'client_secret': 'MySecret',
          'server_metadata_url': 'https://myAuthorizationServer/.well-known/openid-configuration',
          'client_kwargs': {
            'scope': 'openid email profile groups'
          }
        },
        # 自定义用户信息解析逻辑
        'oauth_user_info_getter': lambda resp: resp.json(),
        # 用户信息映射规则,适配Dex返回的字段结构
        'userinfo_mappings': {
          'username': 'preferred_username',
          'email': 'email',
          'first_name': 'given_name',
          'last_name': 'family_name'
        }
      }
    ]
    # 自定义角色同步钩子
    def oauth_after_login(user, oauth_response):
        from superset.models.core import Role
        user_groups = oauth_response.get('groups', [])
        # 清空用户原有角色,避免权限残留
        user.roles = []
        for group in user_groups:
            role_name = OAUTH_GROUP_ROLE_MAPPING.get(group)
            if role_name:
                role = Role.query.filter_by(name=role_name).first()
                if role:
                    user.roles.append(role)
        # 所有用户默认添加Public角色保证基础权限
        public_role = Role.query.filter_by(name='Public').first()
        if public_role and public_role not in user.roles:
            user.roles.append(public_role)
        return user

生效方式

修改完成后执行以下命令更新 Superset 部署即可:
helm upgrade superset superset/superset -f values.yaml

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 15:48:01