You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 06:02:16