我有一个 apache 气流分支,我想在代理服务器后面运行它。所有身份验证都将在气流之外处理,因此我不希望客户再次使用另一组凭据登录。有什么方法可以从气流中完全删除/禁用身份验证。
基本上,我想摆脱这个初始登录屏幕,并允许任何到达气流的人都拥有用户(非管理员)访问权限。[最坏的情况是管理员访问也可以。]
我正在尝试使用 RBAC 功能启用 Airflow LDAP 身份验证,并进行了以下更改:
rbac = true和删除authentication = TrueAIRFLOW_HOME目录下 创建 webserver_config.py 文件webserver_config.py 文件包含:
import os
from airflow import configuration as conf
from flask_appbuilder.security.manager import AUTH_LDAP
basedir = os.path.abspath(os.path.dirname(__file__))
SQLALCHEMY_DATABASE_URI = conf.get(‘core’, ‘SQL_ALCHEMY_CONN’)
CSRF_ENABLED = True
AUTH_TYPE = AUTH_LDAP
AUTH_ROLE_ADMIN = ‘Admin’
AUTH_USER_REGISTRATION = True
AUTH_USER_REGISTRATION_ROLE = “Admin”
AUTH_LDAP_SERVER = ‘ldaps://ldap.xxx.yyy.net:636‘
AUTH_LDAP_SEARCH = “ou=Users,o=corp”
AUTH_LDAP_BIND_USER = ‘cn=ldap-proxy,ou=Users,o=corp’
AUTH_LDAP_BIND_PASSWORD = ‘YOUR_PASSWORD’
AUTH_LDAP_UID_FIELD = ‘uid’
AUTH_LDAP_USE_TLS = False
AUTH_LDAP_ALLOW_SELF_SIGNED = …Run Code Online (Sandbox Code Playgroud) 我目前正在尝试将LDAP中的用户组自动映射到基于Flask AppBuilder框架的应用程序中的用户角色,但无法提出解决方案。我已经阅读了整个Flask AppBuilder文档,但没有找到与此相关的内容。这是我想出的基本配置。我不知道如何将不同的角色映射到不同的用户组。
AUTH_TYPE = AUTH_LDAP
AUTH_LDAP_SERVER = "ldap://ldapserver.local"
AUTH_LDAP_USE_TLS = False
AUTH_LDAP_SEARCH = "dc=domain,dc=local"
AUTH_LDAP_BIND_USER = "CN=Query User,OU=People,dc=domain,dc=local"
AUTH_LDAP_BIND_PASSWORD = "password"
AUTH_USER_REGISTRATION = True
AUTH_USER_REGISTRATION_ROLE = "Admin"
Run Code Online (Sandbox Code Playgroud) 我从在Superset 中使用 OpenID/Keycloak 开始,并按照说明进行了所有操作。但是,这是一个旧帖子,并非一切都有效。我还尝试通过将其安装为 FAB 附加组件来实现自定义安全管理器,以便在我的应用程序中实现它,而无需编辑现有的超集代码。
我正在运行 KeyCloak 4.8.1.Final 和 Apache SuperSet v 0.28.1
正如帖子中所解释的,SuperSet 开箱即用并不能很好地与 KeyCloak 配合使用,因为它使用 OpenID 2.0 而不是 KeyCloak 提供的 OpenID Connect。
第一个区别是pull request 4565被合并后,不能再做:
from flask_appbuilder.security.sqla.manager import SecurityManager
Run Code Online (Sandbox Code Playgroud)
相反,您现在必须使用:(根据 UPDATING.md 文件)
from superset.security import SupersetSecurityManager
Run Code Online (Sandbox Code Playgroud)
在上面提到的帖子中,海报展示了如何分别创建管理器和查看文件,但没有说把它放在哪里。我将管理器和视图类放在同一个文件中,命名为manager.py,并将它放在 FAB 附加结构中。
from flask_appbuilder.security.manager import AUTH_OID
from superset.security import SupersetSecurityManager
from flask_oidc import OpenIDConnect
from flask_appbuilder.security.views import AuthOIDView
from flask_login import login_user
from urllib.parse import quote
from flask_appbuilder.views import ModelView, SimpleFormView, expose
import logging
class …Run Code Online (Sandbox Code Playgroud) 我已开始使用Apache Airflow(基于 FAB 构建)并通过 OAuth 启用身份验证(如FAB Security中所示)。我只有一个 OAUTH_PROVIDER(天蓝色)。
仅供参考,气流版本 2.1.4
当我启动气流主页时,它用于打开我的 OAUTH_PROVIDER 的直接登录页面。
现在,当我将气流升级到 2.2.4 并配置相同的 OAUTH (Azure) 提供程序时,真正的问题开始了。
当我启动气流主页时,页面如下所示
单击“使用 azure 登录”按钮后,将出现用户登录页面。
与旧版气流相比,最新版本多了一个页面。
为什么对我来说很重要?
我们正在 Web 应用程序中渲染气流,这个额外的“登录方式”页面看起来不太好。
请提供一些有关跳过额外互动的信息。
我正在尝试在超集中添加来自 OAuth 的自定义用户信息检索,该超集中构建在 Flask-appbuilder 之上。
官方文档提供以下信息:
使用 SecurityManager oauth_user_info_getter 装饰器装饰您的方法。让您的方法接受本示例中的确切参数,然后返回包含检索到的用户信息的字典。
http://flask-appbuilder.readthedocs.io/en/latest/security.html#authentication-oauth
文档中的示例也没有多大帮助,因为装饰器被放在注释中。
我在 Superset 中将自定义装饰器放在哪里?我已将自定义装饰器放在 superset_config.py 中,但我没有为我工作。
我正在使用 Airflow 设置 RBAC,并在本地开始测试。我已通过控制台配置了 AWS Cognito 用户组。此外,我有一个 webserver_config.py 文件,已安装到 Airflow docker 容器中,以使用 RBAC 设置 OAuth。
我的 webserver_config.py 文件中的相关部分:
COGNITO_URL = os.getenv('COGNITO_URL')
CONSUMER_KEY = os.getenv('COGNITO_CLIENT_KEY')
SECRET_KEY = os.getenv('COGNITO_CLIENT_SECRET')
# When using OAuth Auth, uncomment to setup provider(s) info
# Google OAuth example:
OAUTH_PROVIDERS = [{
'name':'AWS Cognito',
'whitelist': ['@company.com'], # optional
'token_key':'access_token',
'icon':'fa-amazon',
'remote_app': {
'base_url': os.path.join(COGNITO_URL, 'oauth2/idpresponse'),
# 'base_url': COGNITO_URL,
'request_token_params':{
'scope': 'email profile'
},
'access_token_url': os.path.join(COGNITO_URL, 'oauth2/token'),
'authorize_url': os.path.join(COGNITO_URL, 'oauth2/authorize'),
'request_token_url': None,
'consumer_key': CONSUMER_KEY,
'consumer_secret': SECRET_KEY,
}
}]
Run Code Online (Sandbox Code Playgroud)
变量如下: …
我正在使用Flask App构建器来制作基本网页。我想根据登录的用户更改默认登录页面,例如,用户1登录后应重定向到/ home / user1页面,用户2应登录到/ home / general页面等。
以下是我的自定义索引视图
class MyIndexView(IndexView):
index_template = 'index.html'
@expose('/')
def main(self):
return redirect(url_for('AuthDBView.login'))
@expose('/index')
def index(self):
return self.render_template('index.html', message="Welcome to my website")
Run Code Online (Sandbox Code Playgroud)
并通过调用启动应用
appbuilder = AppBuilder(app, db.session, indexview=MyIndexView)
Run Code Online (Sandbox Code Playgroud)
我还没有看到任何有关如何实现此目的的示例或文档。非常感谢您的帮助
我正在尝试通过Oauth2 在Apache SuperSet中启用身份验证.
由于它是基于Flask AppBuilder构建的,它支持OAuth并且非常易于设置和使用,因此它应该是直截了当的.
我设法使以下两个示例与Twitter Oauth配置无缝协作:
现在我正在尝试将相同的配置应用于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身份验证的痕迹.
有人能弄清楚我做错了什么吗?