通过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
相关产品推荐
相关产品推荐

