Apache SuperSet中的Oauth身份验证

Lin*_*abo 2 python flask docker flask-appbuilder apache-superset

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

由于它是基于Flask AppBuilder构建的,它支持OAuth并且非常易于设置和使用,因此它应该是直截了当的.

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

  1. FAB OAuth示例
  2. flask-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
Run Code Online (Sandbox Code Playgroud)

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

COPY superset_config.py .superset
Run Code Online (Sandbox Code Playgroud)

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

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

小智 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'
          }
       }
]
Run Code Online (Sandbox Code Playgroud)