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

如何限制Flask+BigQuery应用仅允许企业域Google账号登录?

解决Flask应用仅允许企业域Google账号登录的问题

嘿,我懂你现在的头疼点——明明按手册配置了员工认证,结果私人Gmail账号还能蹭进来,完全不符合「仅企业员工访问」的要求。别慌,咱们从两个层面来搞定这个问题:代码层面验证邮箱域名,再配合Google Cloud端的根源限制,双管齐下就能彻底解决。

第一步:从Google OAuth获取用户邮箱并验证域名

不管你是手动实现Google OAuth2登录,还是用Flask-Dance这类库,登录成功后都能从Google的用户信息接口拿到用户的邮箱。这里给你一个手动处理的示例:

from flask import Flask, redirect, url_for, session
import requests

app = Flask(__name__)
app.secret_key = "你的应用密钥"  # 记得换成真实密钥

# OAuth回调路由(假设你已经完成了OAuth客户端ID等基础配置)
@app.route("/google/callback")
def google_callback():
    # 从session中取出Google返回的访问令牌
    access_token = session.get("google_access_token")
    if not access_token:
        return redirect(url_for("login"))

    # 请求Google用户信息接口,获取邮箱
    user_info_url = "https://www.googleapis.com/oauth2/v3/userinfo"
    headers = {"Authorization": f"Bearer {access_token}"}
    resp = requests.get(user_info_url, headers=headers)
    user_data = resp.json()

    # 提取用户邮箱
    user_email = user_data.get("email")
    if not user_email:
        return "无法获取用户身份信息,请重试", 400

    # 验证邮箱域名是否属于企业域
    allowed_domain = "你的企业域名.com"  # 替换成你的真实企业域
    email_domain = user_email.split("@")[-1]

    if email_domain != allowed_domain:
        return "抱歉,仅允许企业域账号登录", 403

    # 验证通过,将用户信息存入session,跳转到应用首页
    session["authorized_user"] = user_email
    return redirect(url_for("dashboard"))

如果你用的是Flask-Dance,也可以在回调的钩子函数里做同样的域名检查,核心逻辑都是提取邮箱、拆分域名、对比验证。

第二步:在Google Cloud端做根源限制

代码验证是第二道防线,更推荐在Google Cloud Console里直接限制可访问的用户群体,从根源上阻止私人账号登录:

  • 登录Google Cloud Console,进入你的项目
  • 找到「API和服务」→「OAuth同意屏幕」
  • 将「用户类型」设置为内部(仅限你的Google Workspace组织)
  • 保存配置后,只有你的企业域内的账号才能看到并使用这个OAuth应用,私人Gmail账号连登录入口都碰不到

总结

把这两种方式结合起来:Google端限制仅内部用户可访问,应用代码再做二次域名验证,就能确保只有你的企业员工才能登录这个Flask应用了。如果遇到OAuth配置的细节问题,也可以检查下Google Cloud里的客户端ID是否关联了你的企业Workspace组织。

内容的提问来源于stack exchange,提问作者Gluz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:44:59