首页 > 解决方案 > Apache Superset 和 Auth0 返回“意外的关键字参数‘范围’”

问题描述

前段时间,我使用 AWS Cognito 成功地将 Superset 身份验证与 Oauth 集成。

现在我正在尝试对 Auth0 做同样的事情,重用以前的配置并根据 Auth0 文档更改端点。

不幸的是,登录失败,Superset 的日志返回以下消息:

2021-10-20 10:30:48,886:ERROR:flask_appbuilder.security.views:Error on OAuth authorize: request() got an unexpected keyword argument 'scope'

这是 Oauth 配置superset_config.py

from superset.security import SupersetSecurityManager

import json
import logging

logger = logging.getLogger(__name__)

class CustomSsoSecurityManager(SupersetSecurityManager):
    def oauth_user_info(self, provider, response=None):
        if provider == 'auth0':
            res = self.appbuilder.sm.oauth_remotes[provider].get('userinfo')
            if res.raw.status != 200:
                logger.error('Failed to obtain user info: %s', res.data)
                return
            me = json.loads(res._content)
            logger.warning(" user_data: %s", me)
            prefix = 'Superset'
            logging.warning("user_data: {0}".format(me))
            return {
                'username' : me['email'],
                'name' : me['name'],
                'email' : me['email'],
                'first_name': me['given_name'],
                'last_name': me['family_name'],
            }

AUTH_TYPE = AUTH_OAUTH
AUTH_USER_REGISTRATION = True
AUTH_USER_REGISTRATION_ROLE = "Public"

AUTH0_URL = os.getenv('AUTH0_URL')
AUTH0_CLIENT_KEY = os.getenv('AUTH0_CLIENT_KEY')
AUTH0_CLIENT_SECRET = os.getenv('AUTH0_CLIENT_SECRET')

OAUTH_PROVIDERS = [{
    'name':'auth0',
    'token_key': 'access_token',
    'icon':'fa-at',
    'url': AUTH0_URL,
    'remote_app': {
        'client_id': AUTH0_CLIENT_KEY,
        'client_secret': AUTH0_CLIENT_SECRET,
        'request_token_params': {
            'scope': 'email openid profile'
        },
        'response_type': 'token_id',
        'base_url': AUTH0_URL,
        'access_token_url': os.path.join(AUTH0_URL, 'oauth/token'),
        'authorize_url': os.path.join(AUTH0_URL, 'authorize'),
        'access_token_method':'POST',
        'request_token_url': os.path.join(AUTH0_URL, 'oauth/token'),
        'api_base_url': AUTH0_URL,
        }
    }
]

CUSTOM_SECURITY_MANAGER = CustomSsoSecurityManager

我已经为response_type(code, token, token_id) 尝试了不同的值。

还尝试将其request_token_url留空,在这种情况下,错误会发生变化,因为用户数据似乎是一个空字典:

2021-10-13 15:52:10,358:WARNING:superset_config: user_data: {}
2021-10-13 15:52:10,358:WARNING:root:user_data: {}
2021-10-13 15:52:10,358:ERROR:flask_appbuilder.security.views:Error returning OAuth user info: 'email'

所以我假设实际上返回了令牌,我不明白为什么 Flask 抱怨属性“范围”。

也试过这个,因为它看起来与我的问题非常相似,但这些配置都不适合我。

标签: oauthopenidauth0apache-superset

解决方案


希望你有两个文件 custom_sso_security_manager.py 和 superset_config.py

您可以从返回中删除以下两行并尝试(custom_sso_security_manager.py)。

'first_name': me['given_name'],
'last_name': me['family_name'],

推荐阅读