【问题标题】:Oauth authentication in Apache SuperSetApache SuperSet 中的 Oauth 身份验证
【发布时间】:2017-12-10 16:30:33
【问题描述】:

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

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

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

  1. FAB OAuth example
  2. flask-oauthlib examples

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

Docker

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

按照 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 身份验证的痕迹。

谁能弄清楚我做错了什么?

【问题讨论】:

    标签: python docker flask flask-appbuilder apache-superset


    【解决方案1】:

    您必须更改 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'
              }
           }
    ]
    

    【讨论】:

    • SECRET_KEYCSRF_ENABLEDSQLALCHEMY_DATABASE_URI 如何与 Google OAuth 配置相关联?
    • 这与google auth无关,只是我每次需要时使用的通用配置文件。
    • 这是超集 config.py 文件吗?我们需要添加整个代码 sn-p 吗?
    【解决方案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 security docs 抄来的,以备下次有漂移时使用。

    【讨论】:

    • 它不是将 redirect_uri 作为 http 发送吗?
    猜你喜欢
    • 2015-02-02
    • 1970-01-01
    • 2018-07-10
    • 2011-09-17
    • 1970-01-01
    • 1970-01-01
    • 2020-09-19
    • 1970-01-01
    • 2014-07-09
    相关资源
    最近更新 更多