Apache Superset集成Auth0时报scope意外关键字参数错误如何解决?
问题排查与解决方案
1. 解决request() got an unexpected keyword argument 'scope'报错
该错误的根本原因是错误配置了OAuth2流程不需要的request_token_url参数:
request_token_url是OAuth1.0协议的专用参数,Auth0使用OAuth2.0,你将该参数配置为oauth/token后,Flask-AppBuilder会尝试调用这个地址获取请求令牌,并且错误地将scope参数传入该请求,导致Authlib抛出参数不兼容的错误。- 直接删除
request_token_url配置项,或者显式设置为None即可解决该报错。
2. 解决用户信息返回空字典的问题
删除request_token_url后出现用户信息为空,需要修正以下两处配置:
2.1 修正OAuth基础配置
原有remote_app配置存在多处不符合Auth0 OAuth2.0规范的问题,替换为以下配置:
OAUTH_PROVIDERS = [{ 'name':'auth0', 'token_key': 'access_token', 'icon':'fa-at', 'remote_app': { 'client_id': AUTH0_CLIENT_KEY, 'client_secret': AUTH0_CLIENT_SECRET, 'request_token_params': { 'scope': 'openid email profile', # 新增audience参数,指定Auth0的API受众,避免返回不兼容的令牌格式 'audience': f"{AUTH0_URL}/api/v2/" }, # 服务端OAuth统一使用授权码流程,response_type固定为code 'response_type': 'code', 'access_token_url': f"{AUTH0_URL}/oauth/token", 'authorize_url': f"{AUTH0_URL}/authorize", 'access_token_method':'POST', 'api_base_url': f"{AUTH0_URL}/", } } ]
2.2 修正用户信息解析逻辑
旧版的_content属性读取方式不兼容新版Authlib,替换为标准的响应解析方法:
def oauth_user_info(self, provider, response=None): if provider == 'auth0': res = self.appbuilder.sm.oauth_remotes[provider].get('userinfo') if res.status_code != 200: logger.error('Failed to obtain user info: %s', res.text) return me = res.json() logger.warning(" user_data: %s", me) return { 'username' : me['email'], 'name' : me['name'], 'email' : me['email'], 'first_name': me['given_name'], 'last_name': me['family_name'], }
3. 可选版本适配验证
如果以上配置修改后仍然报错,检查依赖版本兼容性:
- Flask-AppBuilder版本 >= 3.4.0
- Authlib版本 >= 0.15.4,且低于1.0.0版本(1.x版本存在部分Flask-AppBuilder不兼容的API变更)
内容的提问来源于stack exchange,提问作者MariusPontmercy
相关产品推荐
相关产品推荐

