Airflow 2配置Google OAuth遇redirect_uri_mismatch及循环登录问题
Airflow 2配置Google OAuth的问题解决
问题1:Error 400: redirect_uri_mismatch
这个错误的核心是GCP OAuth客户端配置的重定向URI和Airflow实际请求的不匹配。
- 登录GCP控制台,找到对应的OAuth 2.0客户端ID,将
https://airflow-something.net/oauth-authorized/google添加到Authorised redirect URIs列表中,无需保留之前添加的/home或根路径URI。
问题2:添加正确URI后出现循环登录
循环登录通常是会话管理配置缺失或Airflow基础配置不一致导致的,按以下步骤排查修复:
1. 修正Airflow基础URL配置
打开airflow.cfg,确保base_url设置为你的Airflow域名:
base_url = https://airflow-something.net
这个配置会影响Flask App Builder生成OAuth回调地址,必须和重定向URI的域名完全一致。
2. 完善webserver_config.py配置
在现有配置基础上补充以下关键项:
from flask_appbuilder.security.manager import AUTH_OAUTH import os import logging basedir = os.path.abspath(os.path.dirname(__file__)) # 生成随机密钥的命令:openssl rand -hex 32 SECRET_KEY = "替换为你的随机32位十六进制密钥" SESSION_COOKIE_SECURE = True # 启用HTTPS下的会话Cookie AUTH_TYPE = AUTH_OAUTH AUTH_ROLES_SYNC_AT_LOGIN = True AUTH_USER_REGISTRATION = True AUTH_USER_REGISTRATION_ROLE = "Admin" OAUTH_PROVIDERS = [ { "name": "google", "icon": "fa-google", "token_key": "access_token", "whitelist": ['@meowmeow.com'], "remote_app": { "client_id": os.getenv("CLIENT_ID"), "client_secret": os.getenv("CLIENT_SECRET"), "api_base_url": "https://www.googleapis.com/oauth2/v2/", "userinfo_endpoint": "https://www.googleapis.com/oauth2/v2/userinfo", # 显式指定用户信息端点 "client_kwargs": {"scope": "email profile"}, "access_token_url": "https://accounts.google.com/o/oauth2/token", "authorize_url": "https://accounts.google.com/o/oauth2/auth", "request_token_url": None, }, }, ]
SECRET_KEY:Flask用于加密会话的密钥,缺失会导致登录后会话无法持久化,进而触发循环跳转。SESSION_COOKIE_SECURE:强制会话Cookie仅通过HTTPS传输,避免在HTTPS环境下Cookie丢失。userinfo_endpoint:显式指定Google用户信息获取端点,确保FAB能正确获取登录用户的邮箱信息。
3. 确认环境变量加载
确保CLIENT_ID和CLIENT_SECRET两个环境变量已被Airflow WebServer正确加载:
- 如果使用systemd启动Airflow,需在service文件中添加环境变量,或通过
EnvironmentFile加载。 - 可在webserver_config.py中添加日志验证:
logging.info(f"加载的CLIENT_ID: {os.getenv('CLIENT_ID')}")
4. 清除浏览器缓存
清除浏览器中对应Airflow域名的Cookie和缓存,避免旧的无效会话干扰登录流程。
内容的提问来源于stack exchange,提问作者KristiLuna
相关产品推荐
相关产品推荐

