Apache Superset与Keycloak OAuth集成登录失败:请求被拒绝
解决Keycloak与Apache Superset OAuth认证跳转后提示“The request to sign in was denied”的问题
根据你提供的配置,以下几个问题可能导致这个错误:
1. Keycloak Web来源配置错误
你当前的Web来源是http://localhost:8089/%5C*,这里的%5C是反斜杠的URL转义,正确格式应为允许所有子路径的http://localhost:8089/*。
修正Keycloak客户端的Web来源为:
http://localhost:8089/*
2. Superset OAuth配置中的API路径错误
Keycloak 23版本的OpenID Connect端点路径已调整,当前配置存在两处问题:
api_base_url指向了旧的/auth/路径,应改为对应realm的OpenID Connect基础路径- 重复设置
base_url与authorize_url,导致端点冲突 - 缺少用户信息端点配置,Superset无法获取登录用户的核心资料完成认证
修正后的OAUTH_PROVIDERS配置如下:
OAUTH_PROVIDERS = [ { 'name': 'keycloak', 'icon': 'fa-key', 'token_key': 'access_token', 'remote_app': { 'client_id': 'test', 'client_secret': 'dElzstUQqUgQshK23IWWjmNuoe9GgIo8', 'api_base_url': 'https://{my_keycloak_domain}/realms/{my_realm_name}/protocol/openid-connect/', 'client_kwargs': { 'scope': 'openid profile email', 'redirect_uri': 'http://localhost:8089/oauth-authorized/keycloak' }, 'request_token_url': None, 'access_token_url': 'https://{my_keycloak_domain}/realms/{my_realm_name}/protocol/openid-connect/token', 'authorize_url': 'https://{my_keycloak_domain}/realms/{my_realm_name}/protocol/openid-connect/auth', 'userinfo_endpoint': 'https://{my_keycloak_domain}/realms/{my_realm_name}/protocol/openid-connect/userinfo' }, } ]
3. 补充Superset认证必要配置
确保superset_config.py包含以下基础配置(若缺失则添加):
from flask_appbuilder.security.manager import AUTH_OAUTH AUTH_TYPE = AUTH_OAUTH AUTH_USER_REGISTRATION = True AUTH_USER_REGISTRATION_ROLE = 'Gamma' # 登出跳转URL需追加Superset首页作为回调,避免Keycloak登出后无跳转目标 LOGOUT_REDIRECT_URL = 'https://{my_keycloak_domain}/realms/{my_realm_name}/protocol/openid-connect/logout?redirect_uri=http://localhost:8089/'
调试建议
若修正后仍报错,查看Superset日志(默认路径superset/logs/superset.log),重点关注OAuth回调阶段的错误信息:
- 是否存在端点访问失败记录
- 是否有权限不足的提示
- 回调参数与配置是否完全匹配
内容的提问来源于stack exchange,提问作者Giorgos Kormpakis
相关产品推荐
相关产品推荐

