Apache Superset 和 Keycloak 集成

问题描述 投票:0回答:1

我目前正在致力于在 Keycloak 和 Apache Superset 之间配置 OAuth 身份验证。我遇到一个问题,在 Keycloak 页面上输入凭据后,我被重定向回 Superset,并显示消息:“登录请求被拒绝。”

以下是我使用过的配置: Keycloak 配置(23.0.3 版)

客户端设置

有效的重定向 URI: http://localhost:8089/oauth-authorized/keycloak

网络起源: http://localhost:8089/%5C*

Apache 超集配置(superset_config.py):

AUTH_TYPE = AUTH_OAUTH
LOGOUT_REDIRECT_URL = 'https://{my_keycloak_domain}/realms/{my_realm_name}/protocol/openid-connect/logout'
AUTH_USER_REGISTRATION = True
AUTH_USER_REGISTRATION_ROLE = 'Gamma'

Keycloak 的 OAuth 提供程序配置

OAUTH_PROVIDERS = [
{
'name': 'keycloak',
'icon': 'fa-key',
'token_key': 'access_token', # Keycloak uses 'access_token' for the access token
'remote_app': {
'client_id': 'test',
'client_secret': 'dElzstUQqUgQshK23IWWjmNuoe9GgIo8',
'api_base_url': 'https://{my_keycloak_domain}/auth/',
'client_kwargs': {
'scope': 'openid profile email',
},
'base_url': 'https://{my_keycloak_domain}/realms/{my_realm_name}/protocol/openid-connect/auth',
'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',
},
}
]

问题描述

在 Keycloak 登录页面中输入凭据后,重定向到 Superset 会显示以下消息: “登录请求被拒绝。”

我不确定可能导致此错误的原因,非常感谢您帮助识别和解决问题。

有人遇到过类似的问题吗?

我尝试了各种配置,并且已经调试了几个小时。 它似乎首先已连接(它重定向到 Keycloak 登录页面,并在提供正确的凭据后返回到 Superset),但它卡在了最后一步。

oauth keycloak integration apache-superset
1个回答
0
投票
# Custom Security Manager class
class CustomSsoSecurityManager(SupersetSecurityManager):
    def oauth_user_info(self, provider, response=None):  # noqa: ARG002
        me = self.appbuilder.sm.oauth_remotes[provider].get("openid-connect/userinfo")
        me.raise_for_status()
        data = me.json()
        logging.info("User info from Keycloak: %s", data)
        return {
            "username": data.get("preferred_username", ""),
            "first_name": data.get("given_name", ""),
            "last_name": data.get("family_name", ""),
            "email": data.get("email", ""),
            "role_keys": data.get("groups", []),
        }

# Set the custom security manager
CUSTOM_SECURITY_MANAGER = CustomSsoSecurityManager

# OAuth provider configuration for Keycloak
OAUTH_PROVIDERS = [
    {
        'name': 'keycloak',
        'icon': 'fa-key',
        'token_key': 'access_token',  # Keycloak uses 'access_token' for the access token
        'remote_app': {
            'client_id': IAM_CLIENT_ID,
            'client_secret': IAM_CLIENT_SECRET,
            'client_kwargs': {
                'scope': 'openid profile email roles',
            },
            'server_metadata_url': KEYCLOAK_METADATA_URL,
            'api_base_url': KEYCLOAK_API_BASE_URL,
        },
    }
]
© www.soinside.com 2019 - 2024. All rights reserved.