FAB 认证管理器认证¶
默认情况下,FAB 认证管理器要求用户在登录前指定密码。您可以使用以下 CLI 命令创建帐户
# create an admin user
airflow users create \
--username admin \
--firstname Peter \
--lastname Parker \
--role Admin \
--email spiderman@superhero.org
要禁用认证并允许用户以匿名用户身份识别,需要将 $AIRFLOW_HOME/webserver_config.py
文件中的以下条目设置为匿名用户默认拥有的所需角色
AUTH_ROLE_PUBLIC = 'Admin'
注意
Airflow 使用 Python 的配置解析器。此配置解析器会解析 ‘%’ 符号。请确保在您的配置文件中(但不包括环境变量)将任何 %
符号转义为 %%
,否则 Airflow 可能会在配置解析器发生异常时将这些密码泄露到日志中。
密码¶
最简单的认证机制之一是要求用户在登录前指定密码。
请使用命令行界面 airflow users create
创建帐户,或者在 UI 中进行操作。
其他方法¶
会自动生成一个 webserver_config.py
配置文件,可用于配置 FAB 认证管理器以支持 OAuth、OpenID、LDAP、REMOTE_USER 等认证方法。需要注意的是,由于 Flask AppBuilder 和 Authlib 的限制,只支持一部分 OAuth2 提供商。此列表包括 github
、githublocal
、twitter
、linkedin
、google
、azure
、openshift
、okta
、keycloak
和 keycloak_before_17
。
默认情况下,使用 $AIRFLOW_HOME/webserver_config.py
中的以下条目。
AUTH_TYPE = AUTH_DB
可以使用 WSGI 中间件来管理非常具体的认证形式(例如 SPNEGO),并利用 REMOTE_USER 方法
from typing import Any, Callable
from flask import current_app
from flask_appbuilder.const import AUTH_REMOTE_USER
class CustomMiddleware:
def __init__(self, wsgi_app: Callable) -> None:
self.wsgi_app = wsgi_app
def __call__(self, environ: dict, start_response: Callable) -> Any:
# Custom authenticating logic here
# ...
environ["REMOTE_USER"] = "username"
return self.wsgi_app(environ, start_response)
current_app.wsgi_app = CustomMiddleware(current_app.wsgi_app)
AUTH_TYPE = AUTH_REMOTE_USER
另一种创建用户的方式是在 UI 登录页面,通过“注册”按钮允许用户自行注册。可以编辑 $AIRFLOW_HOME/webserver_config.py
中的以下条目以实现此功能
AUTH_USER_REGISTRATION = True
AUTH_USER_REGISTRATION_ROLE = "Desired Role For The Self Registered User"
RECAPTCHA_PRIVATE_KEY = 'private_key'
RECAPTCHA_PUBLIC_KEY = 'public_key'
MAIL_SERVER = 'smtp.gmail.com'
MAIL_USE_TLS = True
MAIL_USERNAME = 'yourappemail@gmail.com'
MAIL_PASSWORD = 'passwordformail'
MAIL_DEFAULT_SENDER = 'sender@gmail.com'
需要通过 pip 安装 Flask-Mail
包以允许用户自行注册,因为这是 Flask-AppBuilder 框架提供的一项功能。
为了支持通过第三方提供商进行认证,需要将 AUTH_TYPE
条目更新为所需的选项,例如 OAuth、OpenID、LDAP,并且需要移除所选选项的引用行的注释并在 $AIRFLOW_HOME/webserver_config.py
中进行配置。
有关更多详细信息,请参阅 FAB 文档的安全性部分。