Airflow 2.0+版本Webserver登录提示Invalid login问题咨询
Airflow 2.0+ 登录报「Invalid login.」排查方案
Airflow 2.0+ 与1.x版本认证逻辑差异极大,1.x默认免密/系统用户认证的逻辑已完全废弃,所有登录用户必须基于FAB(Flask App Builder)的用户表做校验,可按以下顺序排查:
- 第一步:确认元数据库路径一致
90%以上的同类问题都是环境变量不一致导致的:执行用户创建命令、启动webserver/scheduler服务时,AIRFLOW_HOME环境变量值不统一,或者启动服务时加了sudo导致环境变量被重置,最终服务读取的是一个没有任何用户记录的空元数据库。
验证操作:- 分别在执行创建用户的终端、启动服务的终端执行
echo $AIRFLOW_HOME和airflow config get-value core sql_alchemy_conn,确认两个终端输出的Airflow主目录、元数据库连接地址完全一致 - 如果用sudo启动服务,必须加
-E参数保留当前用户的环境变量,例如sudo -E airflow webserver -p 8585,避免sudo切到root用户环境后读取/root/.airflow下的空库
- 分别在执行创建用户的终端、启动服务的终端执行
- 第二步:校验认证后端配置正确性
抄1.x版本旧配置很容易配错认证后端,导致所有认证请求被拦截。打开${AIRFLOW_HOME}/airflow.cfg文件,找到[webserver]段落下的auth_backends配置项,2.0+版本默认正确配置如下:
如果配置项里出现[webserver] auth_backends = airflow.providers.fab.auth_manager.api.auth.backend.basic_authairflow.contrib.auth.backends.password_auth(1.x专属认证后端)、未完成配置的LDAP/PAM认证后端,直接替换为上述默认配置,保存后重启webserver和scheduler服务即可。如果是最小化安装缺失FAB依赖,先执行pip install apache-airflow-providers-fab安装依赖,再执行airflow db migrate同步表结构。 - 第三步:验证元数据库内用户记录有效性
直接查询元数据库中的用户表确认记录存在,默认用sqlite作为元数据库的环境可直接执行以下命令查询:sqlite3 ${AIRFLOW_HOME}/airflow.db "SELECT id, username, active FROM ab_user;"- 如果查询结果中没有admin用户记录:先执行
airflow db migrate确保表结构完整,再带verbose参数重新创建用户,观察执行过程是否有报错:airflow users create --role Admin --username admin --email admin --firstname admin --lastname admin --password admin --verbose - 如果查询结果中存在admin用户记录:直接执行密码重置命令修复可能异常的密码哈希:
airflow users reset-password --username admin --password admin
- 如果查询结果中没有admin用户记录:先执行
- 第四步:清除无效缓存
浏览器残留的旧版本session cookie、webserver遗留的旧临时文件也会导致登录校验失败:- 用浏览器无痕模式访问登录地址,或手动清除对应站点下所有cookie、缓存后重试
- 删除
${AIRFLOW_HOME}目录下的webserver.pid、webserver_cookie*类临时文件,再重启服务
注意:Airflow 2.0+ 不存在默认登录账号,也不支持直接用操作系统用户账号登录,所有可登录账号必须提前通过
airflow users create命令创建。
内容的提问来源于stack exchange,提问作者Vinny Pem
相关产品推荐
相关产品推荐

