2

我正在尝试通过 Oauth2在Apache SuperSet中启用身份验证。

它应该很简单,因为它是基于支持 OAuth 的Flask AppBuilder构建的,并且非常易于设置和使用。

我设法使以下两个示例与 Twitter Oauth 配置无缝协作:

  1. FAB OAuth 示例
  2. 烧瓶 oauthlib 示例

现在我正在尝试将相同的配置应用于 SuperSet。

码头工人

由于我无法针对几个神秘的 python 错误手动构建项目(在 Windows 7/Ubuntu Linux 和 Python 版本 2.7 和 3.6 上尝试过),我决定使用这个 Superset docker 映像(安装和工作正常)并注入我的配置正如文档所建议的:

按照 Apache Superset 提供的说明编写您自己的 superset_config.py。将此文件放在本地目录中,并将此目录挂载到容器内的 /home/superset/.superset 中。

我添加了一个superset_config.py(在一个文件夹中并且单独)并通过添加Dockerfile以下内容来安装它:

ADD config .superset/config

config是文件夹的名称)或(对于单个文件):

COPY superset_config.py .superset

在这两种情况下,文件最终都位于容器中的正确位置(我检查了docker exec /bin/bash),但 Web 应用程序没有显示任何区别:没有 Twitter 身份验证的痕迹。

有人能弄清楚我做错了什么吗?

4

2 回答 2

5

您必须更改 superset_config.py。看看这个示例配置,它对我有用。

import os
from flask_appbuilder.security.manager import AUTH_OID, 
AUTH_REMOTE_USER, 
AUTH_DB, AUTH_LDAP, AUTH_OAUTH
basedir = os.path.abspath(os.path.dirname(__file__))
ROW_LIMIT = 5000
SUPERSET_WORKERS = 4
SECRET_KEY = 'a long and random secret key'
SQLALCHEMY_DATABASE_URI = ‘postgresql://username:pass@host:port/dbname’
CSRF_ENABLED = True
AUTH_TYPE = AUTH_OAUTH
AUTH_USER_REGISTRATION = True
AUTH_USER_REGISTRATION_ROLE = "Public"
OAUTH_PROVIDERS = [
    {
       'name': 'google',
       'whitelist': ['@company.com'],
   'icon': 'fa-google',
   'token_key': 'access_token', 
   'remote_app': {
        'base_url': 'https://www.googleapis.com/oauth2/v2/',
        'request_token_params': {
              'scope': 'email profile'
            },
        'request_token_url': None,
        'access_token_url':         
        'https://accounts.google.com/o/oauth2/token',
        'authorize_url': 'https://accounts.google.com/o/oauth2/auth',
        'consumer_key': 'GOOGLE_AUTH_KEY',
        'consumer_secret': 'GOOGLE_AUTH_SECRET'
          }
       }
]
于 2017-09-26T07:55:26.960 回答
2

2021 年更新:自此答案以来,FAB OAuth 提供程序架构似乎发生了一些变化。如果您尝试使用 Superset >= 1.1.0 执行此操作,请尝试以下操作:

OAUTH_PROVIDERS = [
    {
        'name': 'google',
        'icon': 'fa-google',
        'token_key': 'access_token',
        'remote_app': {
            'client_id': 'GOOGLE_KEY',
            'client_secret': 'GOOGLE_SECRET',
            'api_base_url': 'https://www.googleapis.com/oauth2/v2/',
            'client_kwargs':{
              'scope': 'email profile'
            },
            'request_token_url': None,
            'access_token_url': 'https://accounts.google.com/o/oauth2/token',
            'authorize_url': 'https://accounts.google.com/o/oauth2/auth'
        }
    }
]

当然,分出 GOOGLE_KEY 和 GOOGLE_SECRET。其余的应该没问题。这是从FAB 安全文档中抄录下来的,以备下次出现漂移时使用。

于 2021-05-07T00:21:08.257 回答